第9周总结

每周总结:

这周一个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;
    }
};

 

posted @ 2019-04-28 22:42  zhyyyy  阅读(137)  评论(0编辑  收藏  举报