首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
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
暂无评论,快来抢首评~
相关推荐
11-03 08:13
百度_测试开发
百度内推码百度内推码百度内推码百度内推码
俺的百度内推码:IS9CAR 百度内推链接: https://talent.baidu.com/jobs/list?recommendCode=IS9CAR&recruitType=GRADUATE 欢迎大家投递我们的百度~ 速投,根据历史经验,越早投递越容易 百度是一家充满活力和创新的公司,我们欢迎有激情、有专业技能的人才加入我们的团队! 抓瓦面经,摘自优秀牛油 百度一面面经7.14 1.布隆过滤器使用场景 2.redis自增命令生成唯一id 3.雪花算法的实现 4.乐观锁解决超卖的逻辑 5.项目中下单部分的逻辑 6.如何实现一人一单 7.限流方法 8.redis分布式锁 9.分布...
点赞
评论
收藏
分享
11-04 00:33
渤海大学 后端工程师
这八股我都只背,不实战的
前言最近帮团队面试校招生时,我常遇到这样的场景:候选人流畅背出“TCP三次握手四次挥手”“HashMap底层是数组+链表+红黑树”,但被追问“为什么挥手是四次?”“ConcurrentHashMap在JDK7和8的锁机制差异如何影响性能?”时,眼神逐渐空洞。更扎心的是,有位候选人坦言:“我把《Java面试突击》刷了三遍,但项目里连线程池参数都没调过。”这让我不得不思考:八股文作为面试“通用语言”,何时从“检验基础的尺子”异化为“背诵的KPI”?从业三四年,见过太多人困在“背答案—忘答案—再背”的循环里,却始终没摸到技术能力的门道。今天就从一个Java老兵的角度聊聊八股文到底该怎么学。要聊“该背...
水瓶子010209:
知识太多太多太多太多太多了
,能过基础层已经尽心竭力了,记这个忘那个,可能就是“没打通脉络”,说白了不适合学这个
找工作八股要背到什么程度...
点赞
评论
收藏
分享
10-29 19:48
河南科技大学 Java
刚打开boss就看到了爱耄hr
点赞
评论
收藏
分享
11-03 16:42
井冈山大学 Java
大家秋招压力很大一般怎么调节呀
有没有什么释放压力的方法呀
互联网劝退第一人:
又来钓牛客压抑男
我的秋招日记
点赞
评论
收藏
分享
11-07 12:14
CVTE_web后台开发工程师(准入职员工)
CVTE内推,CVTE内推码
CVTE面经分享记录,摘自优秀牛油4月投的驱动开发实习,现在给我面试...也算是第一个面试了,感觉有些不是常规八股。1.内核是如何启动驱动的2.内核是如何与用户层进行交互,(回答比如说系统调用,共享内存),举一个系统调用的例子,(回答read),具体是 怎么实现的,系统调用是怎么进入内核的,最终调用的是内核的什么接口。3.I2c和spi的优劣,分别几根线,作用4.Uart波特率有哪些,项目中串口传输(也可能是指I2C)的数据包是什么格式的,怎么确保不丢包,怎么确定接收到的 就是想要的数据5.Main函数和中断中如果都用到了同一个函数,有什么值得注意的,如果都用到一个全局变量那6.使...
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
那个敢跟leader对线的实习生,现在怎样了
4706
2
...
数字马力一面(已挂)
4013
3
...
字节业务中台后端开发一面
2730
4
...
转测开是我大学生涯做过最正确的选择
2508
5
...
实习才知道原来攒钱这么不容易(给新人小白)
2083
6
...
数字马力 一面
2027
7
...
云智一面完变筛选中
2027
8
...
数字马力一面
1932
9
...
中兴逼签要接吗?最纠结的一集
1678
10
...
嵌入式开始捞人的企业
1605
创作者周榜
更多
正在热议
更多
#
你实习是赚钱了还是亏钱了?
#
31393次浏览
243人参与
#
CVTE求职进展汇总
#
23423次浏览
322人参与
#
联影求职进展汇总
#
51863次浏览
325人参与
#
用一句话形容你的团队氛围
#
18963次浏览
179人参与
#
本机械人被这些公司泡过池子
#
37171次浏览
182人参与
#
你找工作是从容有余 or 匆忙滚爬?
#
12725次浏览
96人参与
#
360集团校招
#
22540次浏览
165人参与
#
中核求职进展汇总
#
28793次浏览
193人参与
#
海康威视工作体验
#
46006次浏览
158人参与
#
联影医疗求职进展汇总
#
6735次浏览
26人参与
#
外包能不能当跳板?
#
47927次浏览
245人参与
#
毕业论文进行时
#
7239次浏览
84人参与
#
2022毕业即失业取暖地
#
116861次浏览
707人参与
#
同bg的你秋招战况如何?
#
175377次浏览
1024人参与
#
机械人与华为的爱恨情仇
#
137683次浏览
1013人参与
#
嵌入式岗知多少
#
59035次浏览
548人参与
#
面对逼签的应对技巧
#
7871次浏览
40人参与
#
找实习你看重大厂光环还是业务方向
#
41821次浏览
164人参与
#
我来点评面试官
#
17089次浏览
116人参与
#
哪些公司校招卡第一学历
#
220621次浏览
777人参与
#
扒一扒那些奇葩实习经历
#
127166次浏览
1100人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务