拼多多8.25笔试
a了3.6 四道贪心
第一题先用并查集求初始联通块数,最后排序边权从小到大删边,维护最大值
第二题先判断数组中奇数的个数,如果存在奇数,剩下的偶数都进行两个数求和操作,如果不存在奇数,就在所有偶数中选减半次数最小的先变为奇数,其他偶数进行两个数求和操作
第三题直接从后往前遍历模拟替换,可以过60%
第四题把字符串看成一个循环字符串,直接从头开始遍历,维护01字符串的长度就可以了。
有佬有第三题的思路吗?
        第一题先用并查集求初始联通块数,最后排序边权从小到大删边,维护最大值
第二题先判断数组中奇数的个数,如果存在奇数,剩下的偶数都进行两个数求和操作,如果不存在奇数,就在所有偶数中选减半次数最小的先变为奇数,其他偶数进行两个数求和操作
第三题直接从后往前遍历模拟替换,可以过60%
第四题把字符串看成一个循环字符串,直接从头开始遍历,维护01字符串的长度就可以了。
有佬有第三题的思路吗?
全部评论 
 第三题先从前面找到排序好的位置做个标记,然后再从后面替换往前替换到标记的位置,最后再从头检查是不是非递减即可。
第三题需要考虑不需要替换的情况 例如 2 3 4 8,手上的是7,那就不需要再替换了
第三题为什么我只过了20%呀
我想问一下,哥们你笔试过了吗,为什么我笔完了还是待笔试状态
佬们没参加笔试 这个对不 int num = 0;
        int start = arr.length - 1;
        for(;start > 0;) {
            int c = start;
            do{
                c--;
                if(c == 0) break;
            } while (arr[c] >= arr[c-1]);
            //表示有序直接返回
            if(c == 0) break;
            if(cur >=  arr[c] && cur <= arr[c+1]) {
                cur = arr[c];
                num++;
            }else{
                   while(arr[start] >= cur && start != c){
                       start--;
                   }
                   cur = arr[c];
                   num += start - c + 1;
            }
            start = c-1;
        }
        System.out.println(num);
怎么找减半次数最少的偶数呢,我排序后用第一个偶数老是超时
大佬,请问一下第二题,如果存在奇数,剩下的偶数进行求和操作不还是偶数吗?为啥这样做步数是最少的呀?
tql,哥,谢谢了
相关推荐
海康威视公司福利 1149人发布

查看14道真题和解析