腾讯笔试第三题思路哪错了&第四题为什么topk超时

第三题把一个数组分成两个数组a1,a2,要求两个数组长度差不超过1并且数组和的差sum(a1)-sum(a2)最小。
我的想法是原数组排序后从最后大的开始分配,a1的和小就分配到a1,a2和小就a2。直到分配完或者某一个数组的长度到达原数组长度的一半,把剩下的都分到另一个数组里去(原数组长度奇数的话,留下一个最小值分给和小的)。然后一个case也没过⊙▽⊙,自己没测试出会出错的case,不知道哪里错了。

第四题是类似于topk堆排,一次次找最小,如果减去该减的值小于零不符合条件就继续找下一个最小。为啥只过了0.7?有更好的方法吗?

#腾讯#
全部评论
我想到反例了 就比如说这样做下来a1比a2和小2,但a1中恰好有个7然后a2里有个8,这俩虽然当初因缘际会放进了现在的位置,但现在一交换就可以让数组和的差更小。
点赞 回复 分享
发布于 2019-09-20 22:41
第四题没那么复杂 #include <bits/stdc++.h> int main(int argc, const char* argv[]) {     std::ios::sync_with_stdio(false);     size_t N, K;     std::cin >> N >> K;     std::vector<size_t> val(N);     for(size_t i = 0; i < N; i++) {         std::cin >> val[i];     }     std::sort(val.begin(), val.end());     size_t idx = 0;     size_t previous = 0;     for(size_t i = 0; i < K; i++) {         if(idx == N) {             std::cout << "0\n";             continue;         }         std::cout << val[idx] - previous << std::endl;         previous = val[idx];         for(; idx < N; idx++) {             if(val[idx] != previous) {                 break;             }         }     }     return EXIT_SUCCESS; } 第三题举反例,最大数远大于其他数,然后最佳解应该是【最大数+较小的一半数】/【除了最大外的较大的一半数】
点赞 回复 分享
发布于 2019-09-20 22:18
第四题,感觉差不多,我是存一个差值s,然后每次pop一个如果等于差值就扔掉,不然的话就打印同时更新差值,这都不用排序
点赞 回复 分享
发布于 2019-09-20 22:51
第三题你应该不能这么做,你想想,这题除了限定个数,是不是零一背包。。。贪心是不可能对的,不然就没必要用动规做零一背包了
点赞 回复 分享
发布于 2019-09-20 22:37
大佬1、2都A了吗
点赞 回复 分享
发布于 2019-09-20 22:34
第四题AC过了 不需要一直找0 就是找差值的过程 import java.util.Arrays; import java.util.Scanner; public class Main {     public static void main(String[] args) {         Scanner sc = new Scanner(System.in);         int n = sc.nextInt();         int m = sc.nextInt();         int[] a = new int[n];         for (int i = 0; i < n; i++) {             a[i] = sc.nextInt();         }         int[] c = getResult(m,a);         for (int i = 0; i < m; i++) {             System.out.println(c[i]);         }     }     public static int[] getResult(int k, int[] a){         int[] b = new int[k];         if (a.length==0){             return b;         }         Arrays.sort(a);         b[0] = a[0];         int x=1;         for (int i = 1; i < a.length; i++) {             if (a[i] != a[i-1]&&x<k) b[x++] = a[i]-a[i-1];         }         return b;     } }
点赞 回复 分享
发布于 2019-09-20 22:18
第3题贪心肯定不行的,我也想不出怎么做😂 第4题我用堆排AC了(用的是STL里面的set)
点赞 回复 分享
发布于 2019-09-20 22:16
第四题是因为代码太耗时吗?我的太暴力了 所以运行不完所有的case 只AC了0.6😶️
点赞 回复 分享
发布于 2019-09-20 22:15
第四题,实际上就是排序后求差分 #include <iostream> #include <vector> #include <algorithm> using namespace std; int main() {     int n, k;     cin >> n >> k;     vector<int> arr(n);     for(int i = 0; i < n; i++) cin >> arr[i];     sort(arr.begin(), arr.end());     int j = 0;     cout << arr[j] << endl;     j++;     int i = 1;     while(j < n){         if(arr[j-1] == arr[j]){             j++;             continue;         }         else{             cout << arr[j] - arr[j-1] << endl;             j++;             i++;             if(i >= k) break;         }     }     for(j = i; j < k; j++) cout << 0 << endl;     return 0; }
点赞 回复 分享
发布于 2019-09-20 22:14
。。。。你这个
点赞 回复 分享
发布于 2019-09-20 22:14
(后端题,第三题是员工有战斗力,游戏分组,分成人数差不多战斗力也差不多的两组玩游戏。第四题是不断找不为0的最小值输出然后剩下的减掉这个最小值)
点赞 回复 分享
发布于 2019-09-20 22:13
但是自己怎么会知道哪个case会出错呢
点赞 回复 分享
发布于 2019-09-20 22:13

相关推荐

09-25 15:43
门头沟学院 Java
点赞 评论 收藏
分享
09-21 00:23
门头沟学院 C++
拼夕夕在一众加班大厂中都属于累的,为什么还有那么多人愿意去呢?我认为主要有五大原因:1pdd2016年成立,福报厂1999年成立,京东2004年成立,一家晚十几年成立的公司,在当今最卷的电商行业中依然保有前三的市场份额,我认为创始团队是有点东西的。2真正实现了按劳分配pdd真正实现了按劳分配,如果你干的多,大概率你能拿的更多,工作两三年,超过一个中厂部门负责人的待遇是完全有可能的。而在某些其它大厂,你可能干了核心项目,肉被你的组长拿去做成ppt汇报抢了功劳,你只喝到了汤,这在pdd比较少见。3组织文化扁平许多竞对公司p7上面是p8,p8上面还是p8,一个普通员工和ceo之间的汇报线隔了十多级,层级越多,你做的事越难被看见,而pdd的汇报线是很扁平的,不做事就想拿果实比较难。4职级淡化职级只不过是管理工具而已,许多大厂经历那么多次职级改革,职级体系依然存在,无论鹅厂、福报厂还是宇宙厂都是如此,职级是你跳槽时的重要砝码,而pdd至今淡化职级,推崇多劳多得的文化。5人效比高,闲人少人效比是衡量平均每个员工能带来多少营收,用总营收除以总员工数就能得到,腾讯这个数字是550万/人,就是说平均每个员工能带来550万的营收,阿里是300万/人,而pdd是1600万/人,你很难想象一个超3000亿营收的大厂只有两万多员工,人效比越高,证明公司的护城河越深,看看对岸的openai就知道了。说了这么多,并不是一个给加班文化盛行的大厂的洗白贴,江浙有许多工厂工人也是单休还赚不到多少钱。26届多多内推码内推码&nbsp;Aw0TNmXngV内推链接&nbsp;https://careers.pddglobalhr.com/campus/grad?t=Aw0TNmXngV
投递拼多多集团-PDD等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务