《剑指offer》每日三题(第四天)

这里使用的是题库:
https://leetcode.cn/problem-list/xb9nqhhg/?page=1这里是引用

剑指 Offer 31. 栈的压入、弹出序列

剑指 Offer 31. 栈的压入、弹出序列
在这里插入图片描述

代码实现:

class Solution {
    public boolean validateStackSequences(int[] pushed, int[] popped) {
        Deque<Integer> stack=new ArrayDeque<>();
        int k=0;
        for(int i=0;i<pushed.length;i++){
            stack.push(pushed[i]);
            while(!stack.isEmpty()&&stack.peek()==popped[k]){
                k++;
                stack.pop();
            }
        }
        if(!stack.isEmpty())return false;
        return true;
    }
}

剑指 Offer 33. 二叉搜索树的后序遍历序列

剑指 Offer 33. 二叉搜索树的后序遍历序列

在这里插入图片描述
如果是错误的后序数组,是无法让箭头从头到尾遍历完成树的构建的,所以就可以根据能不能完整遍历后序数组来判断后序遍历是否正确。

代码实现:

class Solution {
    int i;
    public boolean verifyPostorder(int[] postorder) {
        i=postorder.length-1;
        createTree(postorder,Integer.MIN_VALUE,Integer.MAX_VALUE);
        return i<0;
    }

    private void createTree(int[] postorder,int min,int max){
        if(i<0){
            return ;
        }
        //获取后序遍历点在中序内的下标--用哈希表获取
        int mid=postorder[i];
        if(mid<min||mid>max){
            return ;
        }
        i--;
        //创建右子树 创建左子树
        createTree(postorder,mid+1,max);
        createTree(postorder,min,mid-1);
    }
}

剑指 Offer 39. 数组中出现次数超过一半的数字

剑指 Offer 39. 数组中出现次数超过一半的数字

代码实现:

class Solution {
    public int majorityElement(int[] nums) {
        int n=nums[0];
        int count=1;
        for(int i=1;i<nums.length;i++){
            if(nums[i]==n){
                count++;
            }else{
                count--;
                if(count<0){
                    count=1;
                    n=nums[i];
                }
            }
        }
        return n;
    }
}

共勉
请添加图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值