通过栈数据结构在数值

题目:给出一个数组,遍历数组。每遍历到一个下标的数据,判断后面是否有比此数据大的元素,有就把对应放到对应下标, 没有就输出0
例如:
输入:[23,11,34,12,43,65,23]
输出:[34,34,43,43,65,0,0]

这是之前一个面试官问的问题 ,当然可以通过遍历数组得到返回的数组;但是当时面试官用了一个栈,通过数组一次遍历+栈存储就能做到?今天想整理一下面试经历,到这儿突然忘了是怎么做的啦。有大神帮忙指点一下吗?

#笔试题目#
全部评论
单调栈(栈里压元素的下标),利用当前元素和栈顶元素做对比: 当前元素大于栈顶元素,就弹栈,并把弹出的下标赋值为该元素; 不管有没有弹栈,都要把当前元素压入栈。
1 回复 分享
发布于 2020-09-29 14:31
    这是对应代码,为了让更多人知道,希望大家可以顶上去 /**      * 通过栈数据结构实现      */     public static int[] ints(int[] ints){         if(null == ints){             return null;         }         Stack<Integer> stack = new Stack<>();         int length = ints.length;         int[] returnInts = new int[length];         for(int i=0;i<length;i++){             /**              * 遍历数组时,先给返回的数组一个初始值0;              * 如果后续栈操作没有操作到对应下标,则说明数组中没有比这个数更大的数据了,对应值应为0              */             returnInts[i] = 0;             Integer num = stack.isEmpty()?0:stack.peek();//第一次遍历会有栈为空             if(ints[num] >= ints[i]){//如果栈顶数据大于操作数,则操作数下标入栈                 stack.push(i);             }else {                 while (!stack.isEmpty()&&ints[num=stack.peek()] < ints[i]){//判断栈顶下标对应数值与操作数值的大小                     returnInts[num] = ints[i];//把操作数值赋值给栈顶下标                     stack.pop(); //弹栈                 }                 stack.push(i);//操作数下标入栈             }         }         return returnInts;     }
1 回复 分享
发布于 2020-09-29 15:49
从后往前扫描,建立单调递增的栈(栈顶到栈底单调递增)
点赞 回复 分享
发布于 2020-09-29 17:03
好像不用栈也可以?时间复杂度也是O(n) public static void demo(int[] arr) {         for (int i = 0; i < arr.length; i++) {             int j = i + 1;             while (j < arr.length) {                 if (arr[i] >= arr[j++]) continue;                 else {                     j--;                     break;                 }             }             if (j == arr.length) {                 while (i < j) {                     arr[i++] = 0;                 }             } else {                 while (i < j) {                     arr[i++] = arr[j];                 }             }             i--;         }     }
点赞 回复 分享
发布于 2020-09-29 20:25

相关推荐

评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务