首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用AI面试
最新面试提效必备
登录
/
注册
小乌
2016-08-02 23:06
电子科技大学 Java
关注
已关注
取消关注
网易笔试Android编程题第三题最大乘积
大家的思路是什么啊,我当时想的是dp,后来发现不适合有负数的,或者我不知道怎么适用于负数
提示
全部评论
推荐
最新
楼层
wj_杭
杭州电子科技大学 算法工程师
有大神共享答案了,穷举法做的: http://blog.csdn.net/siphiababy/article/details/52116246 大神没有加注释,我自己加了注释,希望有用: import java.util.ArrayList; import java.util.List; /** * 用穷举法,列出了所有可能性 * 原理如下: * 比如从左到右总共有20个值(编号1,2,3,...,20),而其中按顺序被选中的只有5个,不考虑别的条件,也就是说,此时要把选中的5个的所有可能心都列出来 * 初始为前五个(1,2,3,4,5),也就是说,最后最大的5个选择只有(16,17,18,19,20) * 所以之后会有: * 1,2,3,4,6 1,2,3,4,7 1,2,3,4,8 ... 1,2,3,4,20(只有最后一个数字变化) * 1,2,3,5,6 1,2,3,5,7 1,2,3,5,8 ... 1,2,3,5,20 * 1,2,3,6,7 1,2,3,6,8 1,2,3,6,9 ... 1,2,3,6,20 * ... * 1,2,4,5,6 1,2,4,5,7 1,2,4,5,8 ... 1,2,4,5,20 * ... * 根据规律即可写出相应的代码来列举出所有可能 * 可以看出,每行的每个值都只有最后一个数字在变化,所以每行可以看成是一个集合ai;总共的列数又是一个集合A * * 之后根据每行结果中,相邻之间的差d,将不满足要求的ai给remove掉,剩余的集合A就是满足条件的所有情况 * 然后根据A中每个集合元素中的编号,求出最终的最大乘积 */ public class Test_4 { /** * * @param n 总数 * @param k 按顺序选中的人数 * @param d 编号相邻之间的最大差 * @param a n个人,每人的能力值 * @return */ static int com(int n, int k, int d, int[] a) { if (n < k || n <= 0 || k <= 0) { System.out.println("n,k数据输入不合理"); return 0; } //为方便计算,数组坐标从1开始,0不考虑 int[] b = new int[k + 1]; //用来临时存储按先后顺序的k个编号,此时先不考虑编号间的差d int[] fg = new int[k + 1]; //整个数组a中,最大的一种编号顺序,当然是a的最后k个连续的编号 for (int i = 1; i <= k; i++) { b[i] = i; //初始化时候,第一种最小的情况,就是前k个编号 fg[i] = i - k + n; //最大的情况,最后k个编号 } //(具体看原理解释)泛型为集合,是因为根据前面原理描述的,每行存储多种情况,只有最后一个数字变化。列和列之间,也只有一个数字在变化 List<List<Integer>> comList = new ArrayList<>(); while (true) { List<Integer> comp = new ArrayList<Integer>(); for (int i = 1; i <= k; i++) comp.add(b[i]); //把规律计算出的可能性存入当前一行的集合 ,行(具体看原理解释) comList.add(comp); //放入整个外层集合,列(具体看原理解释) if (b[1] == n - k + 1) //当列完了最后一种最大的情况(就是数组的随后k个编号),则退出循环 break; /** * 此循环的简单解释 * 每种可能中,都从最后一个编号开始计算每种可能性, * 最后一种全都列举完,那就从倒数第二种开始再列每种可能性,此时要考虑的是最后2个编号的变化,依次3个编号的变化。。。 * 最好看最前面原理中示例的演示 */ for (int i = k; i >= 1; i--) { //每次用当前的编号顺序和最大的比 if (b[i] < fg[i]) { b[i]++; //编号顺序的最后一个依次往后递增 for (int j = i + 1; j <= k; j++) //此过程需要根据原理中列举的示例来演示,不好描述 b[j] = b[j - 1] + 1; //后一个起始永远都是前一个加一 break; } } } //从此时开始考虑编号间隔不大于d for (int i = 0; i < comList.size(); i++) { //剔除所有情况中,不满足间隔不大于d的所有情况 List<Integer> cc = comList.get(i); for (int j = 1; j < cc.size(); j++) { if (cc.get(j) - cc.get(j - 1) > d) { //发现有超过d的就移除,移除后,当前cc为空,需要跳出当前内部循环 comList.remove(i); //移除后,外层集合少去一个,顺序发生变化,所以要i=i-1 i = i - 1; break; } } } /** * 下方不需要再具体解释了,一目了然 */ int max = 0; for (int i = 0; i < comList.size(); i++) { int j = 0; int product = 1; while (j < k) { //comList中存储的是每种满足条件的编号序列,可以对应到数组a中取出相应的值 //最初计算编号是按1开始的,所以下方需要-1 product = product * a[comList.get(i).get(j) - 1]; j++; } if (product > max) max = product; } return max; } public static void main(String[] args) { int[] i = {5,10,56,-30,-15,-25,-40,26,15,10}; //测试数据 System.out.println(com(10, 3, 3, i)); } }
点赞
回复
分享
发布于 2016-08-05 02:41
324234
快手_Android研发工程师
咦。 那这样子就是穷举法对吧?
点赞
回复
分享
发布于 2016-08-03 09:48
牛客722894号
C++
记录当前的最大最小,但是最后才发现这个题的数据非常大,还需要用大数么?。。
点赞
回复
分享
发布于 2016-08-03 09:31
forgot93
杭州电子科技大学 Java
每次DP 记录最大最小。 注意合理初始化就行了
点赞
回复
分享
发布于 2016-08-02 23:20
〝No_Body〞
武汉大学 算法工程师
Leetcode原题 我记得
点赞
回复
分享
发布于 2016-08-02 23:16
schizophrenia
中国科学院大学 C++
最大最小一起搞?
点赞
回复
分享
发布于 2016-08-02 23:10
暂无评论,快来抢首评~
相关推荐
10-13 11:16
上海交通大学 嵌入式软件开发
工作后才觉得选择大于努力—(Linux/MCU双路径详解)
一、学习方向选择以下仅代表笔者个人看法:嵌入式软件总体分为linux和mcu方向。这两个方向的应用场景不同,导致无法在同一份工作中既做Linux,又做mcu。因此,如果在时间不充裕的情况下,大家根据自身情况挑一个方向去学习就够了。mcu方向(也称为嵌入式软硬件方向)更专注于软硬件结合,也就是说除了软件部分之外,还需要懂硬件。如果在软件和硬件分的没那么开的公司,作为一名嵌入式软件工程师,不仅要自己写代码,还需要自己画原理图,画PCB。在软硬件分开的情况下,基本要求是要能看的懂电路原理图,这也是大多数转行者很容易忽视的点。linux方向由于岗位较少,通常需要驱动/内核/应用一起做,仅有部分公司或者...
点赞
评论
收藏
分享
10-16 01:15
已编辑
武汉大学 Java
腾讯客服-一、二、三、四、五与六面面经(录用评估中)
腾讯今年秋招基本不捞人面试,之前ieg海外发行工作室捞了楼主一次,楼主以为还有更好的所以拒了,结果就是长达一个月的了无音讯。 楼主某天重刷了一次简历后被秒捞(真 · 秒捞,就间隔10+min),定睛一看,腾讯客服+集体面试八个大字一瞬间让楼主以为真要去做客服了。要不是职位确实写了后台开发,楼主估计也要拒了。楼主是很想去腾讯的,所以为了了却一桩心事就面一下。 可以想到的是这个部门在公开平台上基本上完全搜不到,能搜到的肯定都是臭打游戏的天天抱怨人机客服的帖子。所以楼主一开始是有点难绷的。所以楼主希望自己的贴子能帮一下后面的朋友。 一面 集体面试说是。楼主以为是那种集体面试,结果是两个面试官面楼主,...
黑曼巴在线招人:
我有一、二、三、四、五与六点羡慕!
查看16道真题和解析
点赞
评论
收藏
分享
09-22 17:09
广东工业大学 前端工程师
终于可以躺了
迷茫的大四🐶:
我不许你接受,我不许你启动咏鹅
点赞
评论
收藏
分享
10-16 21:25
华南理工大学 Java
华为OD值得去吗?
废话不多说,先把结论放前面。(1)双非同学没中大厂offer直接冲;(2)92双一流同学没offer的可冲,仅有中小厂offer的可对比业务及待遇;(3)考研考公延毕等gap一年以上的直接冲;(4)3年以上经验的哥们,跳不到大厂自研但又想快速搞钱的可冲。重点说完了,有兴趣的同学可以接着往下看看西瓜姐的啰里吧嗦嘿嘿嘿~1、应届生(25届or毕业2年内无工作的同学)(1)双非一本/二本:虽说西瓜姐认为学历不代表一切,但在现在这个市场环境下,这类同学找工作真的比较难,许多大厂校招都会卡学历,很多同学根本没有笔面的机会。如果你手上没有中大厂或者高薪offer,但你计算机科班、技术能力强、算法基础扎实(...
总结:offer选择,我...
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
族望留原籍,家贫走四方
9465
2
...
待了一年,一点没亏
2588
3
...
找工作,不用等许可
2417
4
...
大厂这么卷,去国企,外企“上岸”?
2403
5
...
字节日常实习面试记录
2268
6
...
被秋招面试感动了
2216
7
...
实习越多越好还是越精越好?
1863
8
...
回忆录:计算机鼠鼠这一路的成长
1817
9
...
1016 信也科技一面
1783
10
...
秋招现状: 9offer+2HR面 200%的努力期待100%的回报
1711
创作者周榜
更多
正在热议
更多
#
你现在会用到哪些AI技能?
#
6875次浏览
88人参与
#
腾讯工作体验
#
514458次浏览
3550人参与
#
未岚大陆求职进展汇总
#
7862次浏览
84人参与
#
秋招踩过的“雷”,希望你别再踩
#
86500次浏览
1095人参与
#
我的求职进度条
#
94037次浏览
1219人参与
#
大厂VS公务员你怎么选
#
28885次浏览
405人参与
#
智慧芽求职进展汇总
#
1931次浏览
5人参与
#
实习在多还是在精
#
35525次浏览
245人参与
#
小马智行求职进展汇总
#
13790次浏览
50人参与
#
你还有多少年退休?
#
26995次浏览
192人参与
#
顺丰求职进展汇总
#
63673次浏览
315人参与
#
你的房租占工资的比例是多少?
#
65142次浏览
801人参与
#
反问环节如何提问
#
115672次浏览
2471人参与
#
实习下班不想学习,正常吗?
#
20709次浏览
176人参与
#
我对___祛魅了
#
132598次浏览
736人参与
#
你见过哪些工贼行为
#
17069次浏览
91人参与
#
如果不考虑收入,你最想做什么工作?
#
32767次浏览
187人参与
#
金蝶求职进展汇总
#
54135次浏览
263人参与
#
校招谈薪一定要知道的事
#
13762次浏览
118人参与
#
找工作中的小确幸
#
27841次浏览
282人参与
#
总结:哪家公司面试体验感最好
#
70406次浏览
416人参与
#
非技术岗投递进展
#
158169次浏览
1314人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务