leetcode Day19 栈

142 阅读1分钟

1305. 两棵二叉搜索树中的所有元素

var getAllElements = function(root1, root2) {
    let arr1=getVal(root1)
    let arr2=getVal(root2)
    //合并有序数组
    let ans=[]
    let l1=0,l2=0
    while(1){
        if (l1 === arr1.length) {
            for (let i = l2; i < arr2.length; i++) {
                ans.push(arr2[i]);
            }
            break;
        }
        if (l2 === arr2.length) {
            for (let i = l1; i < arr1.length;i++) {
                ans.push(arr1[i]);
            }
            break;
        }
        if(arr1[l1]<arr2[l2]){
            ans.push(arr1[l1])
            l1++
        }else{
            ans.push(arr2[l2])
            l2++
        }
    }
    return ans
};
//先中序遍历得到有序数组
const getVal=(root)=>{
    if(!root)return []
    let res=[]
    const dfs=(node)=>{
        if(!node)return
        dfs(node.left)
        res.push(node.val)
        dfs(node.right)
    }
    dfs(root)
    return res
}

88. 合并两个有序数组

var merge = function(nums1, m, nums2, n) {
    //双指针,贝壳一面
    let l1=0,l2=0
    const res=new Array(m+n).fill(0)
    let cur
    while(l1<m || l2<n){
        if(l1===m){
            cur=nums2[l2]
            l2++
        }
        else if(l2===n){
            cur=nums1[l1]
            l1++
        }
        else if(nums1[l1]<nums2[l2]){
            cur=nums1[l1]
            l1++
        }
        else{
            cur=nums2[l2]
            l2++
        }
        res[l1+l2-1]=cur
    }
    for(let i=0;i<m+n;i++){
        nums1[i]=res[i]
    }
};

1544. 整理字符串

var makeGood = function(s) {
    let stack=[]
    for(let i=0;i<s.length;i++){
        if(stack.length && Math.abs(s[i].charCodeAt()-stack[stack.length-1].charCodeAt())===32){
            stack.pop()
        }
        else{
            stack.push(s[i])
        }
    }
    return stack.join('')
};

1614. 括号的最大嵌套深度

var maxDepth = function(s) {
    let res=0,size=0
    for(let i=0;i<s.length;i++){
        if(s[i]==='('){
            size++
            res=Math.max(size,res)
        }
        if(s[i]===')'){
            size--
        }
    }
    return res
};

剑指 Offer II 052. 展平二叉搜索树

var increasingBST = function(root) {
    let order=getVal(root)
    let dummyNode=new TreeNode(-1)
    let cur=dummyNode
    for(let i of order){
        cur.right=new TreeNode(i)
        cur=cur.right
    }
    return dummyNode.right
};
const getVal=(root)=>{
    let res=[]
    const dfs=(node)=>{
        if(!node)return
        dfs(node.left)
        res.push(node.val)
        dfs(node.right)
    }
    dfs(root)
    return res
}

1700. 无法吃午餐的学生数量

var countStudents = function(students, sandwiches) {
    while(1){
        let cur=students[0]
        if(cur!==sandwiches[0]){
            students.shift()
            students.push(cur)
        }else{
            students.shift()
            sandwiches.shift()
        }
        if(!students.includes(sandwiches[0])){
            break
        }
    }
    return students.length
};

栈简单题写完啦!