1.7 LeetCode(剑指offer)

67 阅读1分钟

40.最小的k个数

//快排又双忘了
var getLeastNumbers = function (arr, k) {
    if(arr.length==0||k==0) return [];
    var quickSelect = (arr, left, right)=>{
        // 满足下列条件时可中止排序
        if(right==k-1||left==k) return;
        if(left>=right) return;
        let l = left;
        let r = right;
        let store = arr[l];
        while(l<r){
            while(store<=arr[r]){
                r--;
            }
            if(l>=r) break;
            swap(arr, l++, r);
            while(store>arr[l]){
                l++;
            }
            if(l>=r) break;
            swap(arr, l, r--);
        }
        quickSelect(arr, left, l);
        quickSelect(arr, l+1,right);
    }
    quickSelect(arr, 0, arr.length-1);
    let res = arr.splice(0,k);
    return res;
};
var swap = (nums, i, j)=>{
  const tmp = nums[i];
  nums[i] = nums[j];
  nums[j] = tmp;
}

55.I二叉树的深度

//简单题我重拳出击
var maxDepth = function(root) {
    if(!root) return 0;
    let max = Number.MIN_VALUE;
    var helper = (root, count) =>{
        max = Math.max(max, count);
        if(root.left) helper(root.left, count+1);
        if(root.right) helper(root.right, count+1);
    }
    helper(root, 1);
    return max;
};