首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
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
暂无评论,快来抢首评~
相关推荐
昨天 17:46
已编辑
东华理工大学 Java
苏州字节无限科技合伙企业Java实习(地点上海,4k,明天出结果😍)
项目拷打:问了我两个项目的ai功能是怎么实现的,然后我说只是调用了一下ai模型,微调了一下系统预设,然后就感觉面试官对项目不感兴趣了,他直接说没看到什么亮点😭,让我自己说一个亮点,我说对ai接口限流,他以为是我对大模型进行流量控制,一下子来劲了,然后我说是使用Redission的令牌桶对接口限流,他就停了一下,接着问我会不会写python脚本,绷不住了😂八股拷打接口和抽象类有什么区别?Java中volatile关键字的作用是什么?volatile的底层实现是什么?(就说了什么Load屏障什么之类的,没答全😭)MySQL的事务隔离级别有哪些?MySQL的默认事务隔离级别是什么?MySQL默...
点赞
评论
收藏
分享
04-16 21:08
博世_HR
【百强外企】博世智行学院实习生招募
🥰博世从事汽车与智能交通技术、工业技术、消费品和能源及建筑技术的产业。博世公司以其创新尖端的产品及系统解决方案闻名于世。2022年12月,位列《2022胡润世界500强》第58位。 【招聘岗位】软件开发/IT运维、智能制造、嵌入式开发、产品研发、综合支持五大方向近百个职位,目前是实习生项目火热开启中🔥【并涉及到】物联网IoT、燃料电池新能源、智能制造、自动驾驶、数字化转型、大数据分析等 【工作地点】上海、无锡、杭州、苏州、长沙、西安、北京等全国多个省会城市 【投递链接】https://app.mokahr.com/m/campus_apply/bosch/151492?reco...
点赞
评论
收藏
分享
04-15 21:48
已编辑
郑州轻工业大学 Web前端
没招了
有无大手子帮我看看简历,27届0实习,感觉起步太晚了,但又舍不得学了半学期的前端,boss一百个招呼就一个要简历的,想找个小厂实习过渡,有无建议
点赞
评论
收藏
分享
昨天 11:20
门头沟学院 Java
死磕大厂实习失败,去小厂真的不甘心啊!
我现在的处境真是进退两难啊,一心死磕大厂实习,投了快十家,笔试挂了一半,面试也没下文,真的要emo了。身边有同学劝我,实在不行就去小厂过渡,可我是真不甘心啊!总觉得小厂的平台不够大,学不到东西,而且怕刚接了小厂的offer,大厂的面试通知就来了,到时候骑虎难下,两边都耽误。每天都在纠结,一边是死磕大厂的遥遥无期,一边是小厂的纠结犹豫。看着别人要么拿到大厂实习,要么安心去小厂,就我卡在中间,不上不下。也知道自己有点钻牛角尖,小厂未必就不好,可能反而能接触到核心业务,比在大厂做边缘打杂强,但心里就是过不了那道坎,总觉得“没进大厂,就是输了”。有没有跟我一样的牛友?一心死磕大厂,却屡屡碰壁,面对小厂...
找不到大厂实习可以去小厂...
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
没个“能打”的项目,简历关都过不去
4.2W
2
...
建发 vs 象屿 vs 工行厦门 vs 厦门银行
4.2W
3
...
刷了3段实习,我发现90%的“金融科技项目”都是假的
6564
4
...
字节前端一面
2714
5
...
多益网络三面
2663
6
...
虾皮五面(提前挂)
2663
7
...
字节27agent开发实习一面凉经分享
2642
8
...
恒生电子春招
2448
9
...
整组的实习生全被干掉了...
2344
10
...
腾讯云志一面(已过
2254
创作者周榜
更多
正在热议
更多
#
我的求职进度条
#
1250508次浏览
9264人参与
#
第一份工作应该选择高薪还是大平台
#
221189次浏览
1047人参与
#
华泰星战营,提前锁定校招offer
#
5724次浏览
293人参与
#
你简历上最心虚的一句话
#
3507次浏览
26人参与
#
考公VS就业,你怎么选?
#
100305次浏览
525人参与
#
哪些公司对双非友好
#
230476次浏览
1238人参与
#
卷__卷不过你们,只能卷__了
#
60312次浏览
758人参与
#
校招第一份工作你干了多久?
#
150368次浏览
631人参与
#
商战,最累的是我们
#
31768次浏览
99人参与
#
国企/银行/研究所公司爆料
#
209563次浏览
920人参与
#
荣耀求职进展汇总
#
1176641次浏览
5674人参与
#
比特大陆工作体验
#
18814次浏览
89人参与
#
找工作的破防时刻
#
289821次浏览
2066人参与
#
小红书求职进展汇总
#
238665次浏览
1397人参与
#
面试等了一周没回复,还有戏吗
#
240053次浏览
1842人参与
#
哪些公司在招寒假实习?
#
93802次浏览
765人参与
#
面试线索爆料
#
127421次浏览
699人参与
#
春节前,你还在投简历吗?
#
43187次浏览
351人参与
#
字节7000实习来了,你投了吗?
#
44890次浏览
351人参与
#
大疆求职进展汇总
#
700043次浏览
4351人参与
#
总结:offer选择,我是怎么选的
#
287652次浏览
1566人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务