2个月前攒够了衣服就没打了,重新捡起来,被吊打。。
在这里插入图片描述
第一题
bool runnian(int a){ if(a%400 == 0 || (a%4==0 && a%100 != 0)) return 1; else return 0; } int dijitian(int a,int b,int c){ int sum=c; for(int i=1;i<b;i++){ if(i==1||i==3||i==5||i==7||i==8||i==10||i==12) sum+=31; if(i==4||i==6||i==9||i==11) sum+=30; if(i==2){ if(runnian(a)) sum+=29; else sum+=28; } } return sum; } class Solution { public: int daysBetweenDates(string date1, string date2) { int y1 = 0, m1 = 0, d1 = 0; int y2 = 0, m2 = 0, d2 = 0; y1 = (date1[0]-'0')*1000+(date1[1]-'0')*100+(date1[2]-'0')*10+(date1[3]-'0'); m1 = (date1[5]-'0')*10+(date1[6]-'0'); d1 = (date1[8]-'0')*10+(date1[9]-'0'); y2 = (date2[0]-'0')*1000+(date2[1]-'0')*100+(date2[2]-'0')*10+(date2[3]-'0'); m2 = (date2[5]-'0')*10+(date2[6]-'0'); d2 = (date2[8]-'0')*10+(date2[9]-'0'); int ans=0; if(y1==y2) ans = abs(dijitian(y1,m1,d1)-dijitian(y2,m2,d2)); else{ if(y1>y2){ swap(y1,y2); swap(m1,m2); swap(d1,d2); } for(int i=y1+1;i<y2;i++){ if(runnian(i)) ans+=366; else ans+=365; } ans+=dijitian(y2,m2,d2); if(runnian(y1)) ans+=(366-dijitian(y1,m1,d1)); else ans+=(365-dijitian(y1,m1,d1)); } return ans; } };
第二题
1 <= n <= 10^4
,leftChild.length == rightChild.length == n
,-1 <= leftChild[i], rightChild[i] <= n - 1
。class Solution { public: int in[10010], out[10010]; bool validateBinaryTreeNodes(int n, vector<int>& leftChild, vector<int>& rightChild) { memset(in, 0, sizeof(in)); memset(out, 0, sizeof(out)); for(int i=0; i<n; i++){ out[i]++; if(leftChild[i]!=-1) in[leftChild[i]]++; if(rightChild[i]!=-1) in[rightChild[i]]++; } int root = 0; bool flag = true; for(int i=0; i<n; i++){ if(in[i]==0) root++; if(in[i]>1) flag=false; if(out[i]>2) flag=false; } if(root==1&&flag) return true; else return false; } };
第3题
vector
中,然后按照因子对的绝对值差从小到大排序之后取第1个因子对就可以了。所谓因子对就是对于(a,b)
,如果a=num/b
,那么(a,b)
就是因子对。class Solution { public: struct node{ int x,y; node(){} node(int x_,int y_):x(x_),y(y_){} bool operator<(const node&rhs) const{ return abs(x-y) < abs(rhs.x-rhs.y); } }; vector<int> closestDivisors(int num) { int n = num+1; vector<node>v; for(int i=1; i*i<=n; i++){ if(n%i==0){ v.push_back(node(i,n/i)); } } n=num+2; for(int i=1; i*i<=n; i++){ if(n%i==0){ v.push_back(node(i,n/i)); } } sort(v.begin(), v.end()); vector <int> ans; ans.push_back(v[0].x); ans.push_back(v[0].y); return ans; } };
第4题
sum
)模上3等于多少,分情况讨论即可。class Solution { public: string largestMultipleOfThree(vector<int>& digits) { sort(digits.begin(), digits.end(), greater<int>{}); int sum = 0; int len = digits.size(); for(int i=0; i<len; i++){ sum += digits[i]%3; } sum %= 3; string ans=""; if(sum==0){ for(int i=0; i<len; i++){ ans += digits[i]+'0'; } } else if(sum==1){ int pos = -1; for(int i=len-1; i>=0; i--){ if(digits[i]%3==1){ pos=i; break; } } if(pos != -1){ for(int i=0; i<len; i++){ if(i==pos) continue; ans += digits[i]+'0'; } return ans; } int pos1 = -1, pos2 = -1; for(int i=len-1; i>=0; i--){ if(digits[i]%3==2 && pos1==-1){ pos1 = i; } else if(digits[i]%3==2 && pos2==-1){ pos2 = i; } else if(pos1>0&&pos2>0){ break; } } if(pos1!=-1&&pos2!=-1){ for(int i=0; i<len; i++){ if(i==pos1||i==pos2) continue; ans += digits[i]+'0'; } } } else{ int pos = -1; for(int i=len-1; i>=0; i--){ if(digits[i]%3==2){ pos=i; break; } } if(pos != -1){ for(int i=0; i<len; i++){ if(i==pos) continue; ans += digits[i]+'0'; } return ans; } int pos1 = -1, pos2 = -1; for(int i=len-1; i>=0; i--){ if(digits[i]%3==1 && pos1==-1){ pos1 = i; } else if(digits[i]%3==1 && pos2==-1){ pos2 = i; } else if(pos1>0&&pos2>0){ break; } } if(pos1!=-1&&pos2!=-1){ for(int i=0; i<len; i++){ if(i==pos1||i==pos2) continue; ans += digits[i]+'0'; } } } if(ans=="") return ans; string ans2 = ""; int p = -1; for(int i=0; i<ans.size(); i++){ if(ans[i]!='0'){ p=i; break; } } if(p==-1) ans2="0"; else{ for(int i=p; i<ans.size(); i++){ ans2+=ans[i]; } } return ans2; } };
本文分享自微信公众号 - GiantPandaCV(BBuf233),作者:BBuf
原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。
原始发表时间:2020-02-24
本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。
我来说两句