首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
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
暂无评论,快来抢首评~
相关推荐
07-23 14:01
门头沟学院 golang
韶音科技提前批挂
太难了,双9bg也被刷
投递韶音科技等公司10个岗位
点赞
评论
收藏
分享
07-23 14:06
门头沟学院 Java
虾皮秋招笔试
10道单选5道多选3道算法感觉不太稳,是我太菜了还是题目太难了
投递虾皮信息等公司10个岗位
点赞
评论
收藏
分享
06-26 11:08
北华航天工业学院 嵌入式软件开发
已经不知道该怎么办了,是简历有问题吗😭😭
半解316:
内容充实,细节需要修改一下。 1,整体压缩为一页。所有内容顶格。 2,项目描述删除,直接写个人工作量 修改完之后还需要建议,可以私聊
点赞
评论
收藏
分享
07-25 10:44
米哈游_构建开发(实习员工)
百度提前批一面:面试官居然让我手撕两数之和???最奇幻的一轮面试,结束还说.......
太过于玄幻的一次面试经历了。。。。基本信息:bg9本,两端实习经历,一段游戏大厂,一段小厂后端。面的是百度后端的职位。上来先是自我介绍,然后然后问了我在实习的经历,鼠鼠我就开始念经把自己觉得有技术深度的说了一下。然后问我的比赛的经历,由于是C++开发所以问了关于是如何实现算法的,然后我说了一大堆介绍路径规划的内容。接下来是问比赛团队协作的问题,团队是如何沟通的,我是承担一个怎样的角色等等常规问题。紧接着就是八股盛宴:常见的数据结构是什么,分别介绍;图结构的特点,迪丽斯克雷算法是做什么的如何实现的;什么是面向对象,有什么特征;Redis的内存淘汰和策略是什么;进程和线程的区别是什么;这些八股都挺...
黑皮白袜臭脚体育生:
两数之和都来了,判你赢得了
查看14道真题和解析
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
大模型应用开发面经 (5年经验)
2.3W
2
...
别害怕前端手写,真没想象的难
1.2W
3
...
2025 年了,万分推荐的前端学习路径!!!
7195
4
...
实习都是CRUD怎么包装
6319
5
...
滴滴提前批
4739
6
...
🍀双非鼠鼠上岸大厂攻略🍀
3662
7
...
秋招首凉-腾讯TEG 云架构平台提前批
2663
8
...
百度提前批一面(秋招第一场也估计是压力最大的)
2162
9
...
字节懂车帝 后端实习一面
2079
10
...
扪心自问,你配ssp吗
1667
创作者周榜
更多
正在热议
更多
#
26届的你,投了哪些公司?
#
7253次浏览
108人参与
#
我对___祛魅了
#
15834次浏览
148人参与
#
中兴秋招
#
186609次浏览
2072人参与
#
如何快速融入团队?
#
5923次浏览
81人参与
#
你跟室友的关系怎么样?
#
1274次浏览
32人参与
#
和同事相处最忌讳的是__
#
8029次浏览
91人参与
#
简历上的经历如何包装
#
6293次浏览
171人参与
#
你遇到最难的面试题目是_
#
2214次浏览
50人参与
#
元戎启行求职进展汇总
#
35299次浏览
268人参与
#
打工人的精神状态
#
65496次浏览
1088人参与
#
我和mentor的爱恨情仇
#
61060次浏览
373人参与
#
工作中哪个瞬间让你想离职
#
38437次浏览
305人参与
#
什么样的背景能拿SSP?
#
9574次浏览
83人参与
#
25届如何提前做秋招准备?
#
175992次浏览
2493人参与
#
你最讨厌面试问你什么?
#
4963次浏览
96人参与
#
毕业季,给职场新人一些建议
#
98079次浏览
1775人参与
#
工作中的卑微时刻
#
20272次浏览
165人参与
#
职场人,说说你的烦心事
#
13174次浏览
110人参与
#
远景求职进展汇总
#
53961次浏览
299人参与
#
职场常用语录大全
#
5725次浏览
42人参与
#
一人推荐一个机械人值得去的公司
#
413916次浏览
4157人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务