首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用AI面试
最新面试提效必备
登录
/
注册
上岸的跳板
2017-08-23 23:02
东南大学 Java
关注
已关注
取消关注
昨晚58同城的编程题关于打印前面比当前值小且下标最大?
有n(n>0)个元素的正整型数组a,打印每个数组元素前面值比他小并且下标最大的元素,如果没有则打印-1,请使用尽可能高效的方法来实现。举例:数组a为[3,6,1,4,2,3,7,5,8], 则打印[-1,3,-1,1,1,2,3,3,5]。大家有没有比O(n2)(
就是遍历数组,再遍历当前数的前面值的方法
)更好的方法啊?
提示
全部评论
推荐
最新
楼层
akalaka
中国科学院大学 C++
从后往前,维持一个递减的单调栈,每次元素出栈,该位置该打印的值也就确定了,时间复杂度O(n)
点赞
回复
分享
发布于 2017-08-23 23:39
上岸的跳板
楼主
东南大学 Java
谢谢各位大神的出谋划策,尤其是
@特仑苏先生
,下面我给出代码: import java.util.Stack; public class BiWoXiaoZuiJin { public static int[] findArray(int[] array) { int[] res = new int[array.length]; Stack<Integer> inc = new Stack<>(); for(int i=0; i<array.length; i++) { while(!inc.isEmpty()) { if(inc.peek() >= array[i]) { inc.pop(); } else { res[i] = inc.peek(); inc.push(array[i]); break; } } if(inc.isEmpty()) { inc.push(array[i]); res[i] = -1; } } return res; } public static void main(String[] args) { int[] arr = {3,6,1,4,2,3,7,5,8}; int[] res = findArray(arr); for(int i=0; i<res.length; i++) { System.out.print(res[i] +" "); } } }
点赞
回复
分享
发布于 2017-08-24 15:17
改个名字解解毒...
西安邮电大学
数组a为[3,6,1,4,2,3,7,5,8], 则打印[-1,3,-1,1,1,2,3,3,5]。单调栈:array = [] array必须从小到大有序保存结果:res = []1.3入栈 array = [3] res[0] = -12.6入栈 array = [3,6] res[1] = 33.1入栈 3,6出栈 array = [1], res[2]= -14.4入栈 array = [1,4], res[3] = 15.2入栈 4出栈 array = [1,2], res[4] = 16.3入栈 array = [1,2,3] res[5] = 27.7入栈 array = [1,2,3,7] res[6] = 38.5入栈 7出栈 array = [1,2,3,5] res[7] = 39.8入栈 array = [1,2,3,5,8] res[8] = 5res = [-1, 3, -1, 1, 1, 2, 3, 3, 5]
点赞
回复
分享
发布于 2017-08-24 10:41
醉阳舞
长安大学 Java
我的思路从后往前遍历,i,j下标,i--,j先标到最后一个。如果值i小于值j,i和j之间的全部设为值j,将i赋给j。如果i等于0时j不等于0,将j处值设为-1,把j赋给i,j--,i--。手机打好麻烦。。。
点赞
回复
分享
发布于 2017-08-24 03:28
*nana*
天津理工大学 Java
import java.util.Scanner; //58题 我考虑在遍历每一个数的时候把前面最小值标记出来,如果现在遍历的数比标记的最小值还是小,那就直接输出-1,这样只有在前面存在比当前数小的情况下才会逆向遍历前面的数 public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int arr[] = new int[n]; int brr[] = new int[n]; for (int i = 0; i < arr.length; i++) { arr[i] = sc.nextInt(); } brr[0] = -1; int min=arr[0]; for (int i = 1; i < arr.length; i++) { if(arr[i]<arr[i-1]){ min=arr[i]; } if(arr[i]<min){ brr[i] = -1; continue; } for (int j = i; j >= 0; j--) { if (arr[i] > arr[j]) { brr[i] = arr[j]; break; } else { brr[i] = -1; } } } for (int i = 0; i < brr.length; i++) { System.out.print(brr[i] + " "); } } }
点赞
回复
分享
发布于 2017-08-24 23:54
LaGuZai
左家垅皇家男子职业技术学院 Java
单调栈,楼上已经说了,左神的算法课也讲了,时间复杂度为O(n)
点赞
回复
分享
发布于 2017-08-24 10:59
你说我很好
武汉大学 Java
用一个栈 O(n)即可解决 找到进栈出栈的规律 自己试一试 左神讲过这个题
点赞
回复
分享
发布于 2017-08-24 08:19
lovesick
浙江大学 C++
单调栈
点赞
回复
分享
发布于 2017-08-24 00:28
牛妹啊
京东集团_软件开发工程师
看看大神
点赞
回复
分享
发布于 2017-08-24 00:20
小王1024
西安财经学院 算法工程师
#include<iostream> #include<vector> #include<iterator> #include<algorithm> using namespace std; void Fun(vector<int> &vec) { int len=vec.size(); for(int i=len-1;i>0;--i) { if(vec[i]>vec[i-1]) { int tmp=vec[i]-vec[i-1]; for(int j=i;j>=0;--j) { int s=vec[i]-vec[j]; if(tmp<s) { tmp=s; } } vec[i]=tmp; } else { vec[i]=-1; } } vec[0]=-1; } int main() { vector<int> vec; int n; cin>>n; for(int i=0;i<n;++i) { int tmp; cin>>tmp; vec.push_back(tmp); } Fun(vec); copy(vec.begin(),vec.end(),ostream_iterator<int>(cout," ")); return 0; }
点赞
回复
分享
发布于 2017-08-23 23:40
darling_mandy
南京大学 Java
设两个游标min和max,分别指向当前位置之前最小和最大的数,然后再判断进行打印
点赞
回复
分享
发布于 2017-08-23 23:26
及时行乐z
桂林电子科技大学 Java
我能想到的就是从后往前遍历,最好的时间复杂度是O(n),最坏的是O(n^2),不太稳定。
点赞
回复
分享
发布于 2017-08-23 23:12
暂无评论,快来抢首评~
相关推荐
05-16 00:13
已编辑
门头沟学院 Java
百度Java日常实习一面
最近每天更新一篇,都是老素材去年面的。想冲一冲1000人品的奖章。uu们觉得有帮助的话不妨点个追番,送送花,陈某定带你一路飞驰(凡人修仙传台词)。1.自我介绍2.项目里有什么技术难点吗?3.kafka的架构4.kafka怎么保证数据不丢失5.kafka怎么解决重复消费问题6.kafka的消费顺序性怎么保证7.AQS原理(简历里写了就特别喜欢问)8. jvm内存划分,垃圾回收9.JAVA对象的生命周期10.你用的jdk版本,是哪个垃圾回收器。还了解其它垃圾回收器吗11.redis数据结构,说几条redis原生命令12.mysql三大日志,存了什么,作用13.Spring里怎么实现事务14.让你自...
查看16道真题和解析
点赞
评论
收藏
分享
05-15 22:27
哈尔滨工业大学
HTML:面试官喜欢问什么
本统计来源于对HTML 相关面试真题中高频关键词的分析,反映了在前端、移动端、全栈等技术岗位面试中对于 HTML 的常见考察方向。这些关键词涵盖了 HTML 的核心特性:脚本加载机制、元素类型、语义化标签、布局方式、性能优化(重绘/回流) 等。通过分析这些关键词,我们可以更有针对性地准备 HTML 面试内容,掌握重点知识模块和常见考点。📊 一、关键词分布概览(按占比排序)1. 脚本加载控制defer、async、script标签7.23% + 7.07% + 6.11% ≈ 20.41%2. 元素类型与布局行内元素、块级元素、三栏布局、Flex 布局5.63% + 4.50% + 1.93%...
30万真题,揭秘面试官最...
面试之前应该如何准备?
面试常问题系列
点赞
评论
收藏
分享
04-27 08:59
常州大学 Java
这是来招人的还是来恶心人的😅
牛客139242382号:
《两门以上汇编语言》
点赞
评论
收藏
分享
03-26 13:44
南华大学 Java
怎么还有这样的
在看面经的花生米很野蛮:
这种情况下你当然要回答,你也是吗!!!!我超喜欢他的XXXXX
点赞
评论
收藏
分享
05-17 09:57
清华大学 机械设计/制造
机械硕士工作几年的一些体会
大家好,很久没有认真写文章了(ps:后续认真更新内容),今天对大家分享一些最近我的一些思考,希望我的经历对你们有帮助。主要有以下几个方面的体会:1、想象成到企业都是干实事的,不会搞一些没有意义的事情,(因为在学校的时候就感觉有很多没有意义的任务)而实际呢?企业也有一些很虚的事情,比如很多时候要体现工作态度,做一下没有意义的事情。例如1、有些企业下班后也在工位坐着,为了让领导看底下牛马多么努力。2、领导要给上级的领导汇报的时候,底下五、六个牛马就要连续几个星期做ppt,一版一版的改,领导每看一次都不满意。(有这些时间干一些实事不香吗?)3、领导说啥都是对的,他只会考虑对自己有好处的事情,领导是不...
我在牛爱网找对象
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
25届游戏客户端开发求职总结
2.5W
2
...
广州25应届计算机 Java想转行
1.7W
3
...
【26届四段大厂】大二字节&腾讯offer 投递技巧保姆级教程
5394
4
...
955和996的真正区别
5009
5
...
回望春招路~草草用如履薄冰带过
4568
6
...
从我家亲戚看学历论和努力论
4233
7
...
去美团实习会被人发现是个水货吗😥
3896
8
...
腾讯 CSIG 三面 面经 已OC!~
3790
9
...
我对面的同事,入职一个月没说话
2613
10
...
真的还有必要继续卷计算机吗?
2510
创作者周榜
更多
正在热议
更多
#
我的求职总结
#
3960次浏览
76人参与
#
选offer应该考虑哪些因素
#
4062次浏览
82人参与
#
一人一个landing小技巧
#
32773次浏览
612人参与
#
你想留在一线还是回老家?
#
34238次浏览
422人参与
#
大学最后一个寒假,我想……
#
35100次浏览
445人参与
#
你们公司哪个部门最累?
#
13299次浏览
107人参与
#
辞职之后最想做的一件事
#
7288次浏览
80人参与
#
设计人如何选offer
#
107846次浏览
705人参与
#
比亚迪求职进展汇总
#
702538次浏览
3057人参与
#
牛友们的论文几号送审
#
33348次浏览
698人参与
#
工作后会跟朋友渐行渐远吗
#
19552次浏览
142人参与
#
查收我的offer竞争力报告
#
180317次浏览
1191人参与
#
这些公司卡简历很严格
#
31482次浏览
155人参与
#
你小时候最想从事什么职业
#
88586次浏览
1648人参与
#
58同城求职进展汇总
#
30918次浏览
247人参与
#
你认为工作的意义是什么
#
138514次浏览
999人参与
#
你觉得机械有必要实习吗?
#
5625次浏览
60人参与
#
你最满意的offer薪资是哪家公司?
#
24323次浏览
125人参与
#
毕业后不工作的日子里我在做什么
#
166734次浏览
1466人参与
#
面试被问第一学历差时该怎么回答
#
125400次浏览
781人参与
牛客网
牛客企业服务