首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
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
暂无评论,快来抢首评~
相关推荐
04-27 17:02
已编辑
门头沟学院 游戏策划
菜鸡游戏策划找暑期实习心路历程
暑期找实习也算告一段落了,过程也是比较曲折了。在牛客上也是看过不少经验了,这也来分享下经验希望能帮助到一些人,随手写的将就着看吧。先说下背景吧,26届美本硕。本科游戏制作,硕士计算机。无实习经历。本科毕业设计做过一个独立游戏,上了steam有一定的热度,拿了一个国外游戏大赛的奖。3月:开始投递各家公司,第一波只投了中大厂,系统策划岗位。现在想想也是挺搞笑,当时可以说对行业一窍不通,觉得自己有点想法,自信满满也没怎么准备,结果可想而知。字节------offer:流程最快的。一面直接就是制作人,与其说是面试更像是聊天,简单聊了聊做的项目,中间聊了聊字节的游戏业务,后面还聊到小岛秀夫了。莫名其妙就...
点赞
评论
收藏
分享
04-27 16:13
已编辑
华南理工大学
前端暑期面试记录
小米一面挂因为家在武汉,所以还是蛮想去小米实习,顺便回家的,但可惜一面挂,感觉我的这个没有很大的参考价值,因为确实不记得题目了。1.代码输出提,闭包+变量提升。先是一个很常规的输出题,做出来后,就评论区发给你好几个for循环的闭包+变量提升的题目,大致第一个是常规的,后面就是什么 自执行,变量放里面,放外面,放后面,直接传入变量,先定义函数后执行这些东西结合for循环的变种,反正我感觉我是已经绕 晕了,有点乱答的意思了,然后面试官就问你答案,理由,也不说正确与否,没有反馈,后面觉得反正乱答也说不出理由,干脆就说不会了。2.react输出题,结合setTimeout,useEffect更改st...
zhiyog:
武汉小米吗,多半是我们部门的
点赞
评论
收藏
分享
03-20 13:23
兰州工业学院 网络安全
这年头装货这么多吗?
这也能秀?对中文的理解能力甚至不如一年前的llm
大叔叔1:
你把自己说的话打码,所以你想表达什么
点赞
评论
收藏
分享
03-13 16:51
已编辑
门头沟学院 硬件开发
春招的硬件大厂感觉都卡学历,基本都没回信
恳求各位🐂友对我的简历批评指正
NiuNiu_Zi:
你是我见过最美的牛客女孩
点赞
评论
收藏
分享
04-25 15:29
滴滴_运维开发工程师(准入职员工)
滴滴内推-滴滴内推码
薪资: 我是运营岗,本科生 150/d,工作时间是早10晚7,弹性打卡(但其实每天打卡四小时就算一天),午休 2 小时(不过中午休息区比较难抢) 交通: 我在东软职场,每天上下班有西二旗到公司往返的摆渡车,不同职场之间往来打车可以报销,21:00 下班回家也可以报销(但我从来没用过,没加过班) 福利: 开水畅饮,特定节假日有礼盒,公司经常会举办各种活动,参加会有小礼品和积分,积分可以在商城兑换物品。 吃饭: 午饭需要自己解决,每晚有 30 的餐补,可以去周边餐馆点餐,也可以在内部软件点餐,直接送到所在楼层茶水间 总体感觉在滴滴很舒服,工作强度不大,我所在的部门也没有太多dirt...
滴滴公司福利 605人发布
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
暑期后端高频问题汇总
7.3W
2
...
左手敲代码的程序员,不配拥有offer吗?
6.7W
3
...
五一假期,弯道超车时间表
1.2W
4
...
后端简历上最值得写的项目
1.0W
5
...
北京到底有谁在啊?
8566
6
...
五一别写你那破开源代码了
8170
7
...
五一准备刷完这些面试八股题!!
7387
8
...
拼多多服务端信息确认
6478
9
...
快手投诉后续- HR把我拉黑了!
6205
10
...
和ai聊天,忍不住爆哭
6194
创作者周榜
更多
正在热议
更多
#
设计人如何选offer
#
98399次浏览
689人参与
#
找工作,行业重要还是岗位重要?
#
7753次浏览
102人参与
#
五一之后,实习真的很难找吗?
#
45723次浏览
325人参与
#
盲审过后你想做什么?
#
12686次浏览
113人参与
#
外包能不能当跳板?
#
22197次浏览
191人参与
#
领导秒批的请假话术
#
9931次浏览
74人参与
#
考研可以缓解求职焦虑吗
#
21162次浏览
251人参与
#
五一假期,你打算“躺”还是“卷”?
#
30479次浏览
436人参与
#
找工作前vs找工作后的心路变化
#
7203次浏览
64人参与
#
面试等了一周没回复,还有戏吗
#
115651次浏览
1074人参与
#
硬件人,你被哪些公司给挂了
#
46711次浏览
722人参与
#
安克创新求职进展汇总
#
32580次浏览
415人参与
#
大疆的机械笔试比去年难吗
#
69651次浏览
603人参与
#
应届生薪资多少才合理?
#
3115次浏览
24人参与
#
牛友们的论文几号送审
#
27269次浏览
623人参与
#
写简历别走弯路
#
714501次浏览
7850人参与
#
你喜欢工作还是上学
#
37667次浏览
412人参与
#
如果有时光机,你最想去到哪个年纪?
#
43340次浏览
769人参与
#
如果不工作真的会快乐吗
#
101227次浏览
867人参与
#
每人推荐一个小而美的高薪公司
#
72850次浏览
1357人参与
牛客网
牛客企业服务