leetcode Day28 栈

161 阅读1分钟

812. 最大三角形面积

var largestTriangleArea = function(points) {
    let res=0,s=0
    for(let i=0;i<points.length;i++){
        for(let j=i+1;j<points.length;j++){
            for(let k=j+1;k<points.length;k++){
                s=Area(points[i][0],points[i][1],points[j][0],points[j][1],points[k][0],points[k][1])
                res=res>s?res:s
            }
        }
    }
    return res
}
const Area=(x1,y1,x2,y2,x3,y3)=>{
    return 0.5*Math.abs(x1*y2+x2*y3+x3*y1-x1*y3-x2*y1-x3*y2)
}

71. 简化路径

var simplifyPath = function(path) {
    const paths=path.split('/')
    const stack=[]
    for(let i of paths){
        if(i==='..'){
            if(stack.length){
                stack.pop()
            }
        }else if(i.length && i !=='.'){
                stack.push(i)
            }
    }
    return '/'+stack.join('/')
};

114. 二叉树展开为链表

var flatten = function(root) {
    if(!root)return
    let stack=[]
    let pre=null
    stack.push(root)
    while(stack.length){
        const cur=stack.pop()
        if(pre!==null){
            pre.left=null
            pre.right=cur
        }
        const left=cur.left,right=cur.right
        if(right){
            stack.push(right)
        }
        if(left){
            stack.push(left)
        }
        pre=cur
    }
};

143. 重排链表

var reorderList = function(head) {
    if(!head.next)return head
    let slow=head,fast=head.next
    while(fast && fast.next){
        slow=slow.next
        fast=fast.next
        if(fast.next){
            fast=fast.next
        }
    }

    //反转链表
    let newhead=null,p=slow.next,q=null
    slow.next=null
    while(p){
        q=p
        p=p.next
        q.next=newhead
        newhead=q
    }

    //依次连接
    let resultHead = new ListNode(0), now = resultHead, flag = true;
    slow = head, fast = newhead;
    while(slow || fast) {
        // 通过 flag 控制现在插入 前半部分 还是 后半部分
        if(flag) {
            now.next = slow;
            slow = slow.next;
        } else {
            now.next = fast;
            fast = fast.next;
        }
        now = now.next;
        flag = !flag;
    }
    return resultHead.next;
};