首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
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
暂无评论,快来抢首评~
相关推荐
昨天 15:21
中南大学 算法工程师
美团算法一面,记一下题目和思路
985,算法方向,26届。昨天刚完成美团算法岗一面,趁热记一下,方便自己复盘,也给后面投的同学参考。 面试时长:约55分钟形式:视频 考察内容: 自我介绍后直接问项目,重点挖了分布式训练部分,问梯度同步机制怎么做的,参数服务器和All-Reduce各自适合什么场景。 算法题1:接雨水(LC 42),要求O(n)时间O(1)空间,双指针方案。算法题2:手写快排,要求随机化pivot版本,问为什么要随机化。场景题:给你一个推荐系统,新用户冷启动问题怎么处理,说了基于内容的方法和利用侧信息两个方向。反问环节:问了团队方向和实习转正比例。 整体感觉中等偏难,项目问得比较细,有准备的话不会太慌。 顺带说...
查看7道真题和解析
点赞
评论
收藏
分享
03-14 09:57
吉林农业大学 算法工程师
度小满 大模型开发 一面
1、知道 GPT 和 BERT 这种模型的基础框架是怎样的吗BERT 和 GPT 都是基于 Transformer 的预训练模型,但结构和任务目标不一样。BERT 一般采用 Transformer Encoder 堆叠起来的双向编码结构,在预训练时主要做 MLM,也就是随机遮盖一部分 token,让模型根据上下文去恢复被遮掉的词,因此它更适合理解类任务,比如分类、匹配、抽取、检索表示学习。GPT 采用 Transformer Decoder 堆叠起来的单向自回归结构,在预训练时做 next token prediction,也就是根据前面的 token 预测下一个 token,因此它更适合生成...
AI-Agent面试实战...
点赞
评论
收藏
分享
02-26 15:21
已编辑
华东交通大学 Java
大佬们帮看看简历,希望找到agent开发,孩子想转agent
最近在准备找第二段实习,主要方向想转向 Agent / 智能体开发。目前已经学习了 SpringAI 和 langchain等技术栈,完成了一个支持自定义工作流的项目,能够理解整体架构设计与执行逻辑,具备一定的智能任务编排思路。希望大佬们看看我的简历!
华灯初上i:
给一个问题: 你觉得langchain写agent有什么优势嘛,使用过程中遇到了什么问题,怎么解决的。框架的取消机制如何实现的(推理取消和工具调用取消)。
点赞
评论
收藏
分享
02-24 19:32
广西科技大学 IT技术支持
25届的同学们,毕业之后工作都好吗
快刀斩offer:
干测试,项目组就我一个测试,准备在职考研跑路了
点赞
评论
收藏
分享
03-18 10:55
门头沟学院 Java
第一次找实习,记录一下这段时间做了什么
大三,211,Java后端,第一次正式找实习,写个帖子记录一下,也希望给同样第一次的同学一些参考。时间线:1月:整理了简历,刷完了hot100大半,感觉自己差不多了(后来证明差远了)2月:开始投,字节、腾讯先投,笔试差点没写完,才意识到自己差距2月中:补了两周八股,重新调整复习方向3月初:重新开始投,这次扩大范围,美团、百度、京东、快手、网易都投上了现在:字节进了一面,其他还在等找实习前没想到网申填表是个体力活,每家系统不一样,信息全要重填,最开始真的很崩溃。后来发现牛客有个网申助手,把自己的信息录进去一次,之后打开网申页面自动填,省了很多重复劳动,整个人状态好了一点。现在主要时间放在准备面试...
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
28届实习拷打,一场面试,23个Agent问题
1.0W
2
...
虾皮SSC后端一面面经
4332
3
...
携程3.18Java开发一面面经
4265
4
...
命运换了个赛道给我发牌
4213
5
...
百度一面 Web前端实习生 3.17
4200
6
...
腾讯暑期实习
3703
7
...
真实业务和场景题的疯狂拷打
2988
8
...
25届校招上岸总结 | 我的经验是越早越好
2741
9
...
小红书前端日常实习二面凉经
2500
10
...
腾讯后端暑期实习面试记录
2396
创作者周榜
更多
正在热议
更多
#
如何一边实习一边找下家?
#
25462次浏览
181人参与
#
实习生如何通过转正
#
129491次浏览
1467人参与
#
MiniMax求职进展汇总
#
12519次浏览
222人参与
#
跟HR说什么能被秒回?
#
7974次浏览
150人参与
#
电信求职进展汇总
#
45121次浏览
207人参与
#
春招/暑实第一面是哪家?
#
17162次浏览
217人参与
#
巨人网络春招
#
9778次浏览
163人参与
#
快手年终开大包
#
11746次浏览
97人参与
#
海信求职进展汇总
#
97862次浏览
419人参与
#
面试官最爱问的 AI 问题是......
#
13399次浏览
472人参与
#
银行笔面经互助
#
184620次浏览
1303人参与
#
把自己当AI,现在最消耗你token的问题是什么?
#
2333次浏览
82人参与
#
秋招提前批,你开始投了吗
#
728916次浏览
8459人参与
#
设计人秋招体验最好的公司
#
85888次浏览
742人参与
#
你的嫡系AI是哪个?
#
3401次浏览
95人参与
#
现在入门AI应该走哪些方向?
#
3358次浏览
84人参与
#
你收到了哪些公司的笔试?
#
15441次浏览
85人参与
#
迅雷笔试
#
5326次浏览
27人参与
#
机械人,说说你的烦心事
#
135384次浏览
1136人参与
#
你最近一次加班是什么时候?
#
114511次浏览
561人参与
#
找工作中的小确幸
#
85088次浏览
463人参与
#
实习学到最有价值的工作习惯
#
64600次浏览
491人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务