这里使用的是题库:
https://leetcode.cn/problem-list/xb9nqhhg/?page=1
剑指 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. 数组中出现次数超过一半的数字
代码实现:
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;
}
}
共勉