首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
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-10 12:27
上海大学 产品经理
哇塞 好多26提前批
已经有这么多提前批已经开始啦26的uu们可以多关注一下
点赞
评论
收藏
分享
07-08 11:50
西安电子科技大学 Web前端
其实主包早就找到工作了,但还是每天都刷
每天坚持刷新简历,然后遇到单休/大小周的公司就拒绝,并且明确说不考虑单休其实还坚持和薪资低的说薪资不符合预期,希望可以拉高应届生的基本工资
机械打工仔:
好办法,为双休出一份力
点赞
评论
收藏
分享
05-30 10:50
湖南大学 C++
求拷打27届
想大三上找一个大厂的日常,想大三下争取大厂暑期转正已经看完jvm juc了,项目换成一个Spring+AI /12306会不会好一些?或者还有什么热门的方向推荐学习吗?不想读研
Code溪:
985放大
点赞
评论
收藏
分享
05-21 00:25
电子科技大学 后端
26java求拷打
简历求拷打😭😭现在投暑期感觉太晚了,也怪楼主太拖沓😡😡
lllllkin:
感觉可以精简到一页简历,有些排版感觉不是必须的。 时间线越早的,你自己越熟悉的放前面。描述可以更精简些,一些问题解决感觉可以不用写具体技术栈,卖个关子,等面试官问。
点赞
评论
收藏
分享
07-08 10:49
东华理工大学 网络安全
听说25届就业是最难的一届?
码农索隆:
有点耳熟,你们是我教过最差的一届
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
四段实习终大厂 如此牺牲为哪般
1.8W
2
...
双非二本靠一张嘴拿下美团
1.1W
3
...
通过实习工资给父母换手机
9748
4
...
我从来没想过我会出轨
6097
5
...
三次入职字节,我终于成为了一名正式的bytedancer
5218
6
...
暂且原谅这个世界一下下
4978
7
...
淘天lastday知无不言
3882
8
...
秋招用这个方式改简历👇
3434
9
...
刚来深圳第一天就被宰1650
3321
10
...
儿时记忆在梦中闪回,一觉醒来继续做“大人”
3273
创作者周榜
更多
正在热议
更多
#
实习生的蛐蛐区
#
44651次浏览
352人参与
#
夸夸我的求职搭子
#
199702次浏览
1915人参与
#
你认为小厂实习有用吗?
#
16180次浏览
203人参与
#
说说你知道的学历厂
#
31193次浏览
186人参与
#
应届生,你找到工作了吗
#
19032次浏览
143人参与
#
计算机有哪些岗位值得去?
#
14420次浏览
139人参与
#
你找工作的时候用AI吗?
#
15904次浏览
199人参与
#
下班后的时间你怎么安排
#
8545次浏览
127人参与
#
面试尴尬现场
#
26850次浏览
180人参与
#
三一重工求职进展汇总
#
12907次浏览
60人参与
#
哪一瞬间觉得自己长大了
#
7851次浏览
178人参与
#
材料人,你们签了哪个公司
#
7113次浏览
17人参与
#
社会教会你的第一课
#
31465次浏览
412人参与
#
中核求职进展汇总
#
20418次浏览
152人参与
#
在职场上,你最讨厌什么样的同事
#
14841次浏览
151人参与
#
电网笔面经互助
#
36416次浏览
354人参与
#
简历当中有水分算不算造假?
#
25360次浏览
376人参与
#
神州信息工作体验
#
16340次浏览
75人参与
#
硬件应届生薪资是否普遍偏低?
#
74988次浏览
516人参与
#
学历贬值真的很严重吗?
#
22150次浏览
162人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务