首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
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-17 21:02
已编辑
字节跳动_后端开发(实习员工)
【双非本】上岸字节后端 | 接单 | 奖学金 | 做自媒体,分享下主包的大学四年 ✨🎓
个人背景 📋 学校:普通一本大学软件工程专业,非强双非,非双一流,非计算机强校 🏫 主包的大学还算比较丰富,从迷茫无措的大一新生到成功拿下字节等大厂offer的毕业生,这四年我经历了失恋的低谷、视频创作的小成功、技术接单的磨练、实习转正以及秋招的考验。一路走来,主包既尝试过做视频,也当过项目外包接单,还兼职过技术讲师,最终一步步成长为大厂后端工程师。这个故事或许能给同样来自普通学校但有着不普通梦想的你一些启发与勇气💪🚀 从高中到大学的旅程 高中到大一的暑假:蓄势未发 🌱 高中毕业到大一的暑假,其实在高一时主包就有机会接触C语言,那时候对编程有了朦胧的概念。暑假本打算提前学一部分专业...
投递字节跳动等公司7个岗位 >
牛客创作赏金赛
查收我的offer竞争力报告
点赞
评论
收藏
分享
05-13 18:41
已编辑
桂林电子科技大学 机械设备工程师
想求职一个 半导体设备 岗位那么难吗?
之前因为疫情,很多厂都没有订单就跑路了,现在想求职一个产线 半导体设备 岗位那么难吗?有没有哪位大佬内推一个好打螺丝的岗位(不是半导体都可以)?
点赞
评论
收藏
分享
04-11 23:51
门头沟学院 Java
人人都能过团子就本宫过不了
坚定的芭乐反对画饼_许愿Offer版:
人人都能过要面试干嘛,发个美团问卷填一下,明天来上班不就好了
点赞
评论
收藏
分享
04-15 13:02
四川轻化工大学 测试工程师
四级居然还能加工资
太好了 四级还值三百块
ResourceUtilization:
四六级不愧是大学最有用的证之一
点赞
评论
收藏
分享
05-14 15:50
飞鱼科技_游戏后台管理部_服务端开发工程师(准入职员工)
飞鱼科技内推飞鱼科技内推码
🤔工作体验:⏰ 工作时间 早九晚六半,双休,整体节奏蛮稳的。公司不鼓励加班,日常工作做完就可以走,不过项目版本期工作日加班情况还是没办法避免的。超10点有车费报销。 💼 公司福利 六险一金,公积金按蕞高比例缴纳,免息gou房借款,年度体检,丰富带薪假期。健身房瑜伽室免费开放,还有舞蹈、搏击、瑜伽、游泳、羽毛球、篮球等多元兴趣俱乐部课程! 🏠 人才培养 1v1的导师带教;定制化精品课程学xi,从专业技能与通用技能的提升,到身心疗愈课程的打造,360°全覆盖。线上知识文档或课程、线下知识分享或互动式工坊等,任君挑选。飞鱼科技25届春招内推启动啦!💻招聘岗位:设计类、发行类、开发类、...
飞鱼科技公司福利 129人发布
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
Java后端开发需要理解和背的八股文整理
5.3W
2
...
“我想了想,你去哪我都想和你在一起”
3.3W
3
...
💌【520限时活动公告】牛爱网高甜营业!你的恋爱通关秘籍已送达~
2.3W
4
...
5月16日早上莫名被美团捞起来了
1.4W
5
...
在华为od干的要猝死了
1.1W
6
...
记录一下这两个月面试以来遇到的手撕题
1.0W
7
...
搬砖日常。不如跑路
9802
8
...
离开这座让我伤心的城市了💔,希望以后一切顺利吧!#补录# #裁应届生# #捡漏# #minimax#
8636
9
...
想要上岸大厂先学会拥抱AI
6803
10
...
大二,想要去实习(计算机专业)
6081
创作者周榜
更多
正在热议
更多
#
牛油的搬砖plog
#
30133次浏览
149人参与
#
这些公司卡简历很严格
#
27075次浏览
119人参与
#
一人一个landing小技巧
#
25798次浏览
488人参与
#
大学最后一个寒假,我想……
#
31240次浏览
312人参与
#
正在实习的你,有转正机会吗?
#
372014次浏览
2865人参与
#
写简历别走弯路
#
723901次浏览
7881人参与
#
我在牛爱网找对象
#
180743次浏览
1379人参与
#
运营人求职交流聚集地
#
128129次浏览
962人参与
#
硬件兄弟们 甩出你的华为奖状
#
100569次浏览
675人参与
#
520告白墙
#
24249次浏览
383人参与
#
求职你最看重什么?
#
68068次浏览
381人参与
#
电网笔面经互助
#
31847次浏览
317人参与
#
找工作的破防时刻
#
28342次浏览
428人参与
#
面试被问第一学历差时该怎么回答
#
123500次浏览
771人参与
#
为什么那么多公司毁约
#
164019次浏览
1231人参与
#
运营每日一题
#
68030次浏览
659人参与
#
数字马力求职进展汇总
#
171972次浏览
1454人参与
#
查收我的offer竞争力报告
#
177293次浏览
1085人参与
#
腾讯音乐求职进展汇总
#
86634次浏览
487人参与
#
我发现一个规律
#
3790次浏览
34人参与
牛客网
牛客企业服务