获赞
116
粉丝
87
关注
15
看过 TA
102
门头沟学院
2020
Java
IP属地:浙江
阿里巴巴-软件开发工程师(JAVA)
私信
关注
字节跳动笔试   :今天19:00~21:00有吗?
***星人:白卷的在哪里?
投递字节跳动等公司9个岗位 >
0 点赞 评论 收藏
分享
【京东笔试】Java  合唱队形&&考场安排
handsome_an:笔试的时候没写好,后来完善了一下(没有验证,不保证正确)。 思路是单调栈,栈中存放每一组的最大值。 如果当前元素比栈顶元素大,也就是当前元素可以自己分成一组,讲当前元素入栈。 如果当前元素比栈顶元素小,但是比栈中第二个大元素大,那么当前元素和栈顶元素可以分成一组,则不做处理即可。 如果当前元素小于栈中前两个元素,则先保存栈顶元素,讲栈中比当前元素大的都出栈,最后再将刚才保存的栈顶元素入站。最终栈中有几个元素,就可以分几组。 public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); long a[] = new long[n]; for(int i=0;i<n;i++){ a[i] = sc.nextLong(); } int top = -1; long [] st= new long[n]; st[++top] = a[0]; for(int i=1;i<n;i++){ // 顶部元素 long tmp = st[top]; if(a[i]>=tmp){ st[++top] = a[i]; }else if(!(top>0&&a[i]>=st[top-1])){ while(top>=0&&st[top]>a[i]) { top--; } st[++top] = tmp; } } System.out.println(top+1); }
投递京东等公司9个岗位 >
0 点赞 评论 收藏
分享

创作者周榜

更多
关注他的用户也关注了:
牛客网
牛客网在线编程
牛客网题解
牛客企业服务