• 第 177 场周赛


    日期之间隔几天

    原来java写的时候还要加头文件,这题没有想太多,直接放弃c++,想用java的库函数,获取两天的毫秒数,相减,除以一天的毫秒数就得到了天数之差。

    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    class Solution {
        public int daysBetweenDates(String date1, String date2) {
            SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
            java.util.Date sd = null;
    		try {
    			sd = sdf.parse(date1);
    		} catch (ParseException e) {
    			e.printStackTrace();
    		}
            java.util.Date ed = null;
    		try {
    			ed = sdf.parse(date2);
    		} catch (ParseException e) {
    			e.printStackTrace();
    		}
    		long s=sd.getTime();
    		long e=ed.getTime();
    		if (s>e) {
    			long tmp=s;
    			s=e;
    			e=tmp;
    		}
            int days=(int)((e-s)/(1000*3600*24));
            return days;
        }
    }
    

    5170. 验证二叉树

    这题题中的节点是没有值得,题中都是用下标表示一个节点,这题数据目前有没有覆盖的样例。

    但是我的解法可以过,bfs搜一下就可以了,然后查看经过bfs后是否还有任何点没有被标记,这样得话就是两棵以上的树了,这是非法的。

    const int maxn=1e4+10;
    int vis[maxn];
    
    class Solution {
    public:
        bool validateBinaryTreeNodes(int n, vector<int>& leftChild, vector<int>& rightChild) {
            memset(vis,0,sizeof(vis));
            if (bfs(0,leftChild,rightChild)==0) {
                return false;
            }
            for (int i=0;i<n;i++) {
                if (!vis[i]) {
                    return false;
                }
            }
            return true;
        }
        
        int bfs(int s,vector<int>& leftChild,vector<int>& rightChild) {
            vis[s]=1;
            queue<int> q;
            q.push(s);
            while (!q.empty()) {
                int root=q.front();
                q.pop();
                int left=leftChild[root];
                if (left!=-1) {
                    if (vis[left]) {
                        return 0;
                    }
                    q.push(left);
                    vis[left]=1;
                }
                int right=rightChild[root];
                if (right!=-1) {
                    if (vis[right]) {
                        return 0;
                    }
                    q.push(right);
                    vis[right]=1;
                }
            }
            return 1;
        }
        
    };
    

    5171. 最接近的因数

    这题说实话就是这么写的,没啥好说的。

    class Solution {
    public:
        vector<int> closestDivisors(int num) {
            long long a=sqrt(num);
            a++;
            long long b=a;
            while (a) {
                while (a*b<=num+2) {
                    if (a*b==num+1||a*b==num+2) {
                        return {a,b};
                    }
                    b++;
                }
                a--;
            }
            return {a,b};
        }
    };
    

    5172. 形成三的最大倍数

    这题讲真不会写,后来看了下题解,存入每一个数的个数,sum%31,说明一定有 一个num%3 1 || 两个 num%32 。如果sum%32,说明一定有一个num%32||两个num%31,把他们删掉,然后从大到小输出就可以了。

    class Solution {
    public:
        int cnt[10];
        int del(int m) {
            for (int i=m;i<10;i+=3) {
                if (cnt[i]) {
                    cnt[i]--;
                    return 1;
                }
            }
            return 0;
        }
    
        string largestMultipleOfThree(vector<int>& digits) {
            int sum=0;
            for (auto x:digits) {
                cnt[x]++;
                sum+=x;
            }
            if (cnt[0]==digits.size()) {
                return "0";
            }
            if (sum%3==1) {
                if (!del(1)) {
                    del(2);
                    del(2);
                }
            }
            if (sum%3==2) {
                if (!del(2)) {
                    del(1);
                    del(1);
                }
            }
            int flag=0;
            for (int i=9;i>0;i--) {
                if (cnt[i]) {
                    flag=1;
                    break;
                }
            }
            string ans;
            if (flag) {
                for (int i=9;i>=0;i--) {
                    while (cnt[i]--) {
                        ans+=i+'0';
                    }
                }
                return ans;
            }
            else {
                if (cnt[0]) {
                    return "0";
                }
                else {
                    return "";
                }
            }
        }
    };
    
  • 相关阅读:
    基于google Zxing实现二维码、条形码扫描,仿微信二维码扫描效果(转)
    javascript中call、apply、argument、callee、caller
    Google Analytics10条有用教程(转)
    小问题
    MySQL exists的用法介绍
    warning C4005: “AF_IPX”: 宏重定义的解决办法
    /MT、/MD编译选项,以及可能引起在不同堆中申请、释放内存的问题
    _mkdir
    文件读写操作总结
    Distinct
  • 原文地址:https://www.cnblogs.com/xyqxyq/p/12350224.html
Copyright © 2020-2023  润新知