首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
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-08 17:09
门头沟学院 研发工程师
4.8 - 京东零售 开发-一面
🕐面试时间:30min❓面试问题:自我介绍面试官一直没理解第一个项目到底是干嘛的,然后给看了看前端界面,然后前端的配置信息是怎么存的,后端是怎么做解析的,表结构是怎么样的(感觉是自己的表达能力有所欠缺,搞得面试官有点不耐烦了)mysql 的b树和b+树有什么区别,优势在哪,为什么能减少访问磁盘的次数(这里没答到点子上)redis 的常用数据结构,你平常是怎么用的算法:爬楼梯🙌面试感想:g
查看8道真题和解析
点赞
评论
收藏
分享
04-06 08:00
蚌埠坦克学院 嵌入式软件开发
海康威视 嵌入式软件 二面 面经
1. 在你做过的嵌入式项目中,请详细描述系统整体架构是如何设计的,各个模块之间是如何解耦和通信的?答案:一般我会采用分层架构设计,把系统拆成三个层次:驱动层(Driver/HAL)封装 SPI、I2C、UART、GPIO 等硬件操作对上提供统一接口,屏蔽具体芯片差异服务层(Service)对驱动进行二次封装,例如:传感器服务通信协议解析负责数据处理和逻辑封装应用层(Application)实现具体业务逻辑不直接操作硬件解耦方式:使用**消息队列(Queue)**传递数据使用回调函数处理事件模块之间只通过接口通信,不直接访问内部数据核心原则:“高内聚、低耦合”尽量避免全局变量共享2. 在嵌入式系...
查看14道真题和解析
点赞
评论
收藏
分享
03-31 23:12
已编辑
门头沟学院 Java
27届java简历求拷打
bg双2,投了很多中大厂基本都简历挂,uu们帮忙看看还能怎么优化一下呢,要不要把第二个项目换成agent(还是rpc?)
简历中的项目经历要怎么写
点赞
评论
收藏
分享
03-28 00:43
杭州电子科技大学 C++
老大,我们这样装傻充愣,真的能找到实习吗?
求大家看看这份简历有啥缺点。boss好多已读不回的我已经麻木了,大家嘴毒一点指出来没关系的
找工作勤劳小蜜蜂:
矛盾是没有实习,就是没实战经验,公司不想要,公司不要,你就没有实习,你就进入死循环,另外你的项目不是社会现在有大量岗位存在行业用的,云存储人员早就饱和。
点赞
评论
收藏
分享
04-09 18:21
门头沟学院 业务管理
同学问我为什么投简历这么快
室友今天问我:你怎么投简历投这么快的? 她看我十分钟投了三家,以为我简历写的很短(不是!) 解释了一下,就是用了网申助手,把重复填表这部分省掉了。 简单说一下是什么: 牛客出的Chrome插件,把基本信息录进去一次(姓名学校专业项目经历这些),之后打开任何网申页面,点一下自动填,不用每次重新输。 我投的这几家都能用:字节、腾讯、美团、阿里、网易、快手,大厂没遇到问题。 【我的用法】 早上统一开几个网申tab,插件自动填好,我逐个检查开放题(自我介绍/为什么选我们要自己写),确认没问题提交。 以前投一家要15分钟,现在五家加起来20分钟,剩下时间拿去背面试题。 【缺点也说一下】 个别小厂识别失败...
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
大模型Agent面试全攻略(附答题思路)
1.7W
2
...
谁都可能在说谎,但财报不会骗人
1.5W
3
...
我感觉我遇到神仙mentor了
9861
4
...
春招产品内卷到什么程度了
5378
5
...
字节一二三hr面 java面经(已off)
5156
6
...
秋招失利别慌,好offer不怕晚
4551
7
...
携程工作体验
3785
8
...
上线一个月了,说几句真心话
3697
9
...
入职翼支付2年多,聊聊感受
3455
10
...
有了这个skill我再也没手动改过简历
3058
创作者周榜
更多
正在热议
更多
#
Agent面试会问什么?
#
22185次浏览
794人参与
#
哪些公司一直卡在简历筛选
#
99613次浏览
301人参与
#
厦门银行科技岗值不值得投
#
18247次浏览
419人参与
#
给工作过的公司写一条大众点评,你会怎么写?
#
7542次浏览
113人参与
#
运营每日一题
#
134375次浏览
928人参与
#
烂工作和没工作哪个更痛苦?
#
15642次浏览
247人参与
#
拼多多工作体验
#
54843次浏览
373人参与
#
一人分享一个skill
#
5642次浏览
156人参与
#
我们是不是被“优绩主义”绑架了?
#
43797次浏览
538人参与
#
春招至今,你收到几个面试了?
#
60734次浏览
843人参与
#
央国企投递记录
#
186998次浏览
1710人参与
#
面试体验最好和最差的公司
#
18595次浏览
140人参与
#
机械人面试中的常问题
#
267370次浏览
3692人参与
#
你觉得专业和学校哪个对薪资影响最大
#
103928次浏览
615人参与
#
我是XXX,请攻击我最薄弱的地方
#
71846次浏览
475人参与
#
AI替代不了什么?
#
10346次浏览
160人参与
#
现在入门AI首先要做什么?
#
3646次浏览
92人参与
#
你收到了团子的OC了吗
#
1583345次浏览
11849人参与
#
神州数码信息服务股份有限公司笔试
#
3489次浏览
21人参与
#
你被哪些公司挂了?
#
172774次浏览
969人参与
#
面试尴尬现场
#
224025次浏览
868人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务