首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
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-25 17:46
天津大学 光传输工程师
6点半下班,已经成为公司最后走的人
垂直赛道头部厂,6点半下班就已成为公司最后走的人了
写不来代码的小黑:
咱公司叫啥
聊聊这家公司值得去吗
点赞
评论
收藏
分享
07-25 17:06
柠檬微趣_数据库内核测试工程师(准入职员工)
柠檬微趣内推
面经:暑假投递,面试时间线拉的比较长自我介绍实习经历介绍问了我他们公司有什么产品,让我说一款的细节设置,以及和竞品的细节差异在这个游戏设计一个中秋节主题关卡,应该怎么设计,什么思路?柠檬微趣2025届校招进行中,2026届暑期实习,日常实习进行中~【招聘动态】研发类、数据类、策划类三大岗位仍有较多机会,欢迎投递【福利待遇】- 北京户口指标、一年免费住宿- 七险一金、丰厚年终奖、免费早晚餐- 带薪年假、带薪全员旅游、年度体检- 社团活动、生日礼物、水果下午茶【内推链接】https://app.mokahr.com/m/recommendation-apply/microfunhr/36717?s...
点赞
评论
收藏
分享
06-25 09:33
厦门大学 Java
27届求拷打简历
是不是简历的问题啊,找个日常实习,小米,小红书,快手,米哈游秒挂,其他一直在泡着,投了一个多星期还是0面试
球球别拷打俺了:
现在日常估计没啥hc了,等到八月多估计就慢慢有了。双九✌🏻不用焦虑的
投递快手等公司10个岗位
点赞
评论
收藏
分享
07-01 22:55
兰州城市学院 Java
学院本一个面试都没有啊
从五月投到现在一直都是已读不回,测试运维也投了,还是没有面试,不能真毕业就失业了吧,大佬能不能指点一下
瓦学姐:
26届现在没实习都找不到了,别说25了
点赞
评论
收藏
分享
今天 08:29
腾讯_后端研发
字节 30+ 技术面,遇到最难的题目,欢迎来战
你遇到最难的面试题目是?说到这个话题,还真有一道印象特别深刻的问题。去年秋招的时候,我去面了字节跳动抖音系的一个组,一路通过了前面三轮技术面,最后又被加了一轮技术面。前面的几场面试本身就很难,压力也是真的大,后面有机会可以专门分享下,但最让我印象深刻的,还是这场加面。老板问了我一个系统设计题,题目是:设计一个特效平台的服务架构,包含特效上传、审核、测试、分发、上线流程。要求:1、画出服务链路架构;2、涉及模块划分;3、考虑异常情况处理(如审核失败、测试失败);4、补充存储方案、MQ、并发控制、版本控制等细节。都说字节喜欢考系统设计题,这次是我真切感受到了。一般的系统设计题,会围绕一个具体问题,...
你遇到最难的面试题目是_
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
都是 dirty work,为什么别人的简历上就能言之有物🤔
1.7W
2
...
滴滴提前批
7700
3
...
百度提前批一面(秋招第一场也估计是压力最大的)
6835
4
...
秋招首凉-腾讯TEG 云架构平台提前批
4608
5
...
【07.29更新】能救一个是一个!26届毁意向毁约裁员黑名单
4076
6
...
干活最少的实习生因为长得漂亮转正了
3950
7
...
团孝子启动ing!
2996
8
...
令人心动的offer!!!
2498
9
...
字节懂车帝 后端实习一面
2330
10
...
26滴滴秋招提前批Java一面
2295
创作者周榜
更多
正在热议
更多
#
你遇到最难的面试题目是_
#
6312次浏览
103人参与
#
工作压力大怎么缓解
#
93963次浏览
994人参与
#
中兴秋招
#
196100次浏览
2193人参与
#
工作中哪个瞬间让你想离职
#
50494次浏览
444人参与
#
26届的你,投了哪些公司?
#
20312次浏览
243人参与
#
你最讨厌面试问你什么?
#
13851次浏览
189人参与
#
分享一个让你热爱工作的瞬间
#
32206次浏览
333人参与
#
我对___祛魅了
#
30773次浏览
293人参与
#
简历上的经历如何包装
#
13293次浏览
442人参与
#
你跟室友的关系怎么样?
#
3809次浏览
69人参与
#
如何快速融入团队?
#
11021次浏览
134人参与
#
和同事相处最忌讳的是__
#
14893次浏览
153人参与
#
多益网络求职进展汇总
#
31320次浏览
139人参与
#
什么样的背景能拿SSP?
#
16506次浏览
127人参与
#
我和mentor的爱恨情仇
#
61967次浏览
379人参与
#
打工人的精神状态
#
67969次浏览
1112人参与
#
实习生活中那些难忘的瞬间
#
165072次浏览
2448人参与
#
牛友们的论文几号送审
#
48632次浏览
792人参与
#
元戎启行求职进展汇总
#
36148次浏览
278人参与
#
总结:哪家公司面试体验感最差
#
63438次浏览
288人参与
#
职场常用语录大全
#
6130次浏览
42人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务