每周总结:
这周一个div2和一个div3(我是翻译的,然后还翻译错了,emmmm,一定一定不能漏字,嗯,而且不能猜样例,嗯)
A题:
题目:https://leetcode-cn.com/contest/college/2019-spring/problems/campus-bikes/
题意:
找到人和车最小的距离并匹配,如果距离相等时,选工人序号最小的,如果分配方法有很多,选车序号最小的。
用了二维vector,再排个序,判断加入即可
代码:
class Solution { public: struct node{ int idwork; int idbike; int dis; }; static bool cmp(const node &a,const node &b){//需要加static if(a.dis==b.dis){ if(a.idwork==b.idwork){ return a.idbike<b.idbike; } else return a.idwork<b.idwork; } else return a.dis<b.dis; } vector<int> assignBikes(vector<vector<int>>& workers, vector<vector<int>>& bikes) { int n=workers.size(); int m=bikes.size(); bool visw[n]; bool visb[m]; vector<int> ret(n); vector<node> tmp; memset(visw,0,sizeof(visw)); memset(visb,0,sizeof(visb)); node via; for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ via.idwork=i; via.idbike=j; via.dis=abs(workers[i][0]-bikes[j][0])+abs(workers[i][1]-bikes[j][1]);//计算距离 tmp.push_back(via); } } sort(tmp.begin(),tmp.end(),cmp); int cnt=0; for(int i=0;i<tmp.size();i++){ if(!visw[tmp[i].idwork]&&!visb[tmp[i].idbike]){ ret[tmp[i].idwork]=tmp[i].idbike; visw[tmp[i].idwork]=true; visb[tmp[i].idbike]=true; cnt++; } if(cnt==n) break; } return ret; } };
B题:
题目:https://leetcode-cn.com/contest/college/2019-spring/problems/confusing-number/
题意:
判断翻转的数字是不是数字,与原数字是否相同。
(做的时候错了几次,注意点:是整个序列翻转,不是一个,注意相同的和含有0的数字)
提交方式有点不太习惯。
代码:
class Solution { public: bool confusingNumber(int N) { int cnt=0,a[100]; int temp=N; while(N>0){ //if(N%10!=0) a[cnt]=N%10; N/=10; cnt++; } int flag=0; for(int i=0;i<cnt;i++){ if(a[i]==2||a[i]==3||a[i]==4||a[i]==5||a[i]==7){ flag=1; break; } } if(flag==0){ int b=0; for(int i=0;i<cnt;i++){ if(a[i]==9) a[i]=6; else if(a[i]==6) a[i]=9; else a[i]=a[i]; b=b*10+a[i]; } if(b==temp) flag=1; } if(flag==1) return false; else return true; } };