首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
搜索
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
在线笔面试、雇主品牌宣传
登录
/
注册
小乌
2016-08-02 23:06
电子科技大学 Java
关注
已关注
取消关注
网易笔试Android编程题第三题最大乘积
大家的思路是什么啊,我当时想的是dp,后来发现不适合有负数的,或者我不知道怎么适用于负数
提示
全部评论
推荐
最新
楼层
schizophrenia
中国科学院大学 C++
最大最小一起搞?
点赞
回复
分享
发布于 2016-08-02 23:10
〝No_Body〞
武汉大学 算法工程师
Leetcode原题 我记得
点赞
回复
分享
发布于 2016-08-02 23:16
forgot93
杭州电子科技大学 Java
每次DP 记录最大最小。 注意合理初始化就行了
点赞
回复
分享
发布于 2016-08-02 23:20
牛客722894号
C++
记录当前的最大最小,但是最后才发现这个题的数据非常大,还需要用大数么?。。
点赞
回复
分享
发布于 2016-08-03 09:31
324234
快手_Android研发工程师
咦。 那这样子就是穷举法对吧?
点赞
回复
分享
发布于 2016-08-03 09:48
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
还没有回复哦~
相关推荐
11-19 18:05
哈尔滨工业大学 铸造/锻造工程师
24届上班上了几个月,疯狂想辞职
如上,已经工作3个月了,但是还是不喜欢上班,真的非常想辞职,但是家里人都不同意离职,工资又低。每个月根本就攒不到什么钱。 而且之前入职之前会有人说要带我,结果带了几天那个人离职了,我现在什么都要自己摸索,真的非常崩溃,而且晚上也要加班,没有自己的时间。 最重要的是自己总是达不到考核标准,天天焦虑内耗总担心自己被开了,所以想自己提,但是周围人都不同意,因为这份工作是双休而且交五险一金,真的很烦。 离职又担心找不到更好的工作,在这里呆着又天天内耗,而且这个公司不稳定,你业绩达不到标准,随时可能被开,心累。
如果再来一次,你还会选择这个工作吗?
点赞
评论
收藏
分享
11-16 00:10
淘天集团_HR
淘天补录——算法类
是真没想到算法还要补人,之前T计划已经招了一批,加上陆续发放的offer,可能前面毁约的人还是有一部分,牛客随缘再捞点大佬,各位还没签约或者签了的捞们看看这里,流程处理绝对快(别让我求你投了)岗位算法技术未来生活实验室:算法工程师-机器学习、算法工程师-自然语言处理、算法工程师-多模态部门淘天集团算法技术未来生活实验室建议:熟悉LLM或MLLM的训练等技术,或者有相关领域的研究;在ICCV、CVPR等国际顶级会议、期刊上发表论文,或在相关学术会议组织的权威比赛中获奖或在校园内或互联网公司有相关实习或项目经历更佳;以及熟悉算法和infra的多面手们可以用我的内推链接(点击就是直接内推了)...
投递淘天集团等公司10个岗位 >
点赞
评论
收藏
分享
10-09 09:39
门头沟学院 C++
第一个正式offer
😭😭😭
HHHHaos:
这也太虚了,工资就一半是真的
点赞
评论
收藏
分享
11-19 10:21
重庆大学 研发工程师
开源+私有化的无忧企业文档,一键解决企业知识管理难题
知识文档管理系统(Knowledge Management System,KMS)是一种对文档进行分类、存储、检索和共享的系统。知识文档管理系统分为两种:一种是以文件为核心,注重内容存储,类似于网盘;另一种是以文档为核心,注重知识共享与联动,类似于知识库。第二种是我们常见也是今天要聊的一种文档管理系统。企业在知识管理上存在很多问题,常见的:文档分散在每个员工的电脑上,信息冗余,存在多份数据,难以做到统一文档查找麻烦,无法实现基于内容的查找,无法实现公司级搜索文档涉密权限问题管理难度大、监控成本高、管理难度大文档流转无日志记录,无法良好的事后分析与最终影响在线文档很多基于SaaS服务,涉及信息安...
点赞
评论
收藏
分享
点赞成功,聊一聊 >
点赞
收藏
评论
分享
回复帖子
提到的真题
返回内容
全站热榜
1
...
26日常实习小红书面经
1.7W
2
...
给正在秋招中枯燥的大家找个乐子听听吧,不被理解真的心寒
1.3W
3
...
sagima的阎良出差日记
1.2W
4
...
双非本科四年的总结
9799
5
...
秋招颗粒无收,我要何去何从
8676
6
...
双非学院本,转正云智!
8345
7
...
请大家警惕“总包”骗局!
6983
8
...
收到offer了!!!!
6784
9
...
秋招之路:零基础游戏引擎/图形方向求职总结
5694
10
...
浅谈二本Javaer进大厂的感悟
5063
正在热议
#
25届秋招总结
#
250394次浏览
2035人参与
#
学历or实习经历,哪个更重要
#
41240次浏览
300人参与
#
北方华创开奖
#
22967次浏览
259人参与
#
地方国企笔面经互助
#
2601次浏览
6人参与
#
应届生被毁约被毁意向了怎么办
#
27288次浏览
238人参与
#
选完offer后,你后悔学本专业吗
#
11086次浏览
77人参与
#
你最想要的公司福利是?
#
40301次浏览
127人参与
#
查收我的offer竞争力报告
#
17194次浏览
229人参与
#
机械应届生薪资要多少才合适?
#
12415次浏览
60人参与
#
一觉醒来,我觉醒了超级打工人系统
#
2951次浏览
35人参与
#
如何写一份好简历
#
602699次浏览
8451人参与
#
秋招OC许愿
#
226845次浏览
1873人参与
#
秋招被确诊为……
#
56439次浏览
310人参与
#
你觉得第一学历对求职有影响吗?
#
14910次浏览
121人参与
#
总结:哪家公司面试体验感最差
#
25811次浏览
129人参与
#
面试题刺客退退退
#
137349次浏览
2092人参与
#
不给转正的实习,你还去吗
#
1517421次浏览
16975人参与
#
来聊聊机械薪资天花板是哪家
#
64632次浏览
436人参与
#
大疆求职进展汇总
#
404982次浏览
2890人参与
#
校招入职后的感受
#
157033次浏览
1961人参与
#
实习,投递多份简历没人回复怎么办
#
2391470次浏览
34297人参与
牛客网
牛客企业服务