题解 | #栈的压入、弹出序列#

栈的压入、弹出序列

https://www.nowcoder.com/practice/d77d11405cc7470d82554cb392585106

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param pushV int整型一维数组 
     * @param popV int整型一维数组 
     * @return bool布尔型
     */
    public boolean IsPopOrder (int[] pushV, int[] popV) {
        if(pushV.length == 1){
            return pushV[0] == popV[0];
        }

        boolean result = false;
        Stack stack = new Stack();
        Set<Integer> stackSet = new HashSet<>(pushV.length);
        int pushCount = 0;
        int popCount = 0;
        //第一次入栈
        push(stack,stackSet,pushV[pushCount++]);

        while(true){
            if(pushCount <= 1000 && popCount <= pushCount && stackSet.contains(popV[popCount])){
                int popValue = stack.top();
                if(popValue == popV[popCount]){
                    stack.pop();
                    popCount++;
                }else{
                    result = false;
                    break;
                }
            }else{
                if(pushCount == pushV.length && popCount < pushCount){
                    result = false;
                    break;
                }
                push(stack,stackSet,pushV[pushCount++]);
            }
            if(pushCount == popCount && popCount == pushV.length){
                result = true;
                break;
            }
        }

        return result;
    }

    public static void push(Stack stack,Set<Integer> stackSet,int value){
        stack.push(value);
        stackSet.add(value);
    }

    public static class Stack{
        private Node head;
        private Node tail;
        private int length = 0;

        public void push(int value){
            length++;
            if(head == null){
                head = new Node(value);
                head.next = null;
                tail = head;
            }else{
                Node next = head;
                head = new Node(value);
                head.next = next;
            }
        }

        public int pop(){
            if(length == 0){
                return -1;
            }else{
                length--;
                int popValue = head.value;
                head = head.next;
                return popValue;
            }
        }

        public int top(){
            if(length == 0){
                return -1;
            }else{
                int popValue = head.value;
                return popValue;
            }
        }
    }

    public static class Node{
        private int value;
        private Node next;

        public Node(int value){
            this.value = value;
        }

        public void setValue(int value){
            this.value = value;
        }

        public int getValue(){
            return value;
        }

        public void setNext(Node next){
            this.next = next;
        }

        public Node getNext(){
            return next;
        }
    }


}

#java##入栈##出栈#
全部评论

相关推荐

刚刷到字节跳动官方发的消息,确实被这波阵仗吓了一跳。在大家还在纠结今年行情是不是又“寒冬”的时候,字节直接甩出了史上规模最大的转正实习计划——ByteIntern。咱们直接看几个最硬的数,别被花里胡哨的宣传词绕晕了。首先是“量大”。全球招7000多人是什么概念?这几乎是把很多中型互联网公司的总人数都给招进来了。最关键的是,这次的资源分配非常精准:研发岗给了4800多个Offer,占比直接超过六成。说白了,字节今年还是要死磕技术,尤其是产品和AI领域,这对于咱们写代码的同学来说,绝对是今年最厚的一块肥肉。其次是大家最关心的“转正率”。官方直接白纸黑字写了:整体转正率超过50%。这意味着只要你进去了,不划水、正常干,每两个人里就有一个能直接拿校招Offer。对于2027届(2026年9月到2027年8月毕业)的同学来说,这不仅是实习,这简直就是通往大厂的快捷通道。不过,我也得泼盆冷水。坑位多,不代表门槛低。字节的实习面试出了名的爱考算法和工程实操,尤其是今年重点倾斜AI方向,如果你简历里有和AI相关的项目,优势还是有的。而且,转正率50%也意味着剩下那50%的人是陪跑的,进去之后的考核压力肯定不小。一句话总结:&nbsp;27届的兄弟们,别犹豫了。今年字节这是铁了心要抢提前批的人才,现在投递就是占坑。与其等到明年秋招去千军万马挤独木桥,不如现在进去先占个工位,把转正名额攥在手里。
喵_coding:别逗了 50%转正率 仔细想想 就是转正与不转正
字节7000实习来了,你...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
正在热议
更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务