zoukankan      html  css  js  c++  java
  • 刷题49(力扣3道题)

    84.最小的k个数

    题目链接

    https://leetcode-cn.com/problems/zui-xiao-de-kge-shu-lcof/

    题目描述

    输入整数数组 arr ,找出其中最小的 k 个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。

    示例 1:

    输入:arr = [3,2,1], k = 2
    输出:[1,2] 或者 [2,1]
    

    示例 2:

    输入:arr = [0,1,2,1], k = 1
    输出:[0]

    重难点

    1. 写sort数值排序

    2. 快速排序

    题目分析

    法一:sort排序

    1. 写sort数值从小到大排序;
    2. 根据k输出数组前k个数,就是最小的 k 个数。
    /**
     * @param {number[]} arr
     * @param {number} k
     * @return {number[]}
     */
    var getLeastNumbers = function(arr, k) {
        arr.sort(function(a,b){
            return a-b;
        });
        let res = [];
        for(let i=0;i<k;i++){
            res.push(arr[i]);
        }
        return res;
    };

    法二:快速排序

    /**
     * @param {number[]} arr
     * @param {number} k
     * @return {number[]}
     */
    var getLeastNumbers = function(arr, k) {
        let len = arr.length;
        if(!len || !k) return [];
        let start = 0;
        let end = len -1;
        let index = quikSort(arr,start,end);
        while(index !== k-1){
            if(index > k-1){
                end = index-1;
                index = quikSort(arr,start,end);
            }else{
                start = index+1;
                index = quikSort(arr,start,end);
            }
        }
        return arr.slice(0,index+1);   
    };
    function quikSort(arr,left,right){
        let flag = arr[left];
        while(left < right){
            while(left < right && arr[right] >= flag)
                right--;
            arr[left] = arr[right];
            while(left < right && arr[left] < flag)
                left++;
            arr[right] = arr[left];
        }
        arr[left] = flag;
        return left;
    }
    

      

    85.面试题17. 打印从1到最大的n位数

    题目链接

    https://leetcode-cn.com/problems/da-yin-cong-1dao-zui-da-de-nwei-shu-lcof/

    题目描述

    输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。

    示例 1:

    输入: n = 1
    输出: [1,2,3,4,5,6,7,8,9]
    

    说明:

    • 用返回一个整数列表来代替打印
    • n 为正整数

    重难点

    根据n输出最小的n+1位数。

    题目分析

    1. 根据n确定最小的n+1位数:Math.pow(10,n);
    2. 输出从1到最小的n+1位数(不包括最小的n+1位数),就从 1 到最大的 n 位数。
    /**
     * @param {number} n
     * @return {number[]}
     */
    var printNumbers = function(n) {
        let len = Math.pow(10,n);
        let res = [];
        for(let i=1;i<len;i++){
            res.push(i);
        }
        return res;
    };
    

    86.面试题 04.02. 最小高度树

    题目链接

    https://leetcode-cn.com/problems/minimum-height-tree-lcci/

    题目描述

    给定一个有序整数数组,元素各不相同且按升序排列,编写一个算法,创建一棵高度最小的二叉搜索树。

    示例:

    给定有序数组: [-10,-3,0,5,9],

    一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树:

    0
    /
    -3 9
    / /
    -10 5

    重难点

    二叉搜索树:左子树所有节点的值小于根节点,右子树所有节点的值大于根节点,且左、右子树均为二叉搜索树。
    大于根节点。

    题目分析

    1. 如果数组为空,返回null;
    2. 由于数组是有序数组,找到数组索引1/2的位置,就是数组中间值,即为根节点;
    3. 以数组中间值为根节点建立二叉树;
    4. 左子树的值是小于中间值的数;
    5. 右子树的值是大于中间值的数;
    /**
     * Definition for a binary tree node.
     * function TreeNode(val) {
     *     this.val = val;
     *     this.left = this.right = null;
     * }
     */
    /**
     * @param {number[]} nums
     * @return {TreeNode}
     */
    var sortedArrayToBST = function(nums) {
        let len  = nums.length;
        if(len === 0){
            return null;
        }
        let mid = parseInt(len/2);
        let root = new TreeNode(nums[mid]);
        root.left = sortedArrayToBST(nums.slice(0, mid));
        root.right =sortedArrayToBST(nums.slice(mid+1));
        return root;
    };
    

      

  • 相关阅读:
    第五次博客作业
    第三次博客作业
    个人简介
    实验三
    实验二
    实验一
    《构建之法》心得体会
    第三次博客园作业
    软件测试实验二
    个人简历
  • 原文地址:https://www.cnblogs.com/liu-xin1995/p/12535038.html
Copyright © 2011-2022 走看看