• xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!


    从长度为 M 的无序数组中,找出 N个最小的数

    在一组长度为 n 的无序的数组中,取最小的 m个数(m < n), 要求时间复杂度 O(m * n)

    网易有道面试题

    const minTopK = (m, n) => {
      const obj = {};
      for (let i = 0; i < m.length; i++) {
        if(!obj.hasOwnProperty(m[i])) {
          obj[m[i]] = 1;
        } else {
          obj[m[i]] += 1;
        }
      }
      const arr = Object.entries(obj).sort((a, b) => a[1] - b[1] > 0 ? 1 : -1);
      return arr.slice(0, n).map(item => parseInt(item[0]));
    };
    
    

    demos

    如何在 10 亿数中找出前 1000 大的数?

    分治法

    快速排序 partition

    快速排序

    O(N*logN)

    基本思想:(分治)

    1. 先从数列中取出一个数作为key值;

    2. 将比这个数小的数全部放在它的左边,大于或等于它的数全部放在它的右边;

    3. 对左右两个小数列重复第二步,直至各区间只有1个数。

    middle, left, right

    const QuickSort = (arr = []) => {
      let m = arr[0];
      let left = [];
      let right = [];
      for(let i of arr) {
       if(i < m ) {
        left.push(i);
       } else {
        right.push(i);
       }
     }
      if(left.length > 1) {
       left = QuickSort(left)
      }
      if(right.length > 1) {
       right = QuickSort(right)
      }
      return left.concat(right);
    }
    
    

    bug

    OK

    
    "use strict";
    
    /**
     *
     * @author xgqfrms
     * @license MIT
     * @copyright xgqfrms
     * @created 2020-08-01
     * @modified
     *
     * @description 快速排序 quicksort
     * @difficulty Medium
     * @complexity O(n*log(n))
     * @augments
     * @example
     * @link https://github.com/xgqfrms/leetcode/issues/7#issuecomment-669991209
     * @solutions
     *
     */
    
    const log = console.log;
    
    function quickSort(arr) {
      // 终止条件
      if (arr.length <= 1) {
        return arr;
      }
      // 中间index
      var pivotIndex = Math.floor(arr.length / 2);
      // 中间值,参考值
      var pivot = arr.splice(pivotIndex, 1)[0];
      var left = [];
      var right = [];
      for (var i = 0; i < arr.length; i++) {
        if (arr[i] < pivot) {
          left.push(arr[i]);
        } else {
          right.push(arr[i]);
        }
      }
      // 递归
      return quickSort(left).concat([pivot], quickSort(right));
    };
    
    const arr = [12, 7, 5, 23, 18, 37, 1, 9, 17];
    
    const test = quickSort(arr);
    
    log(`arr =
    `, arr)
    log(`test =
    `, test)
    
    /*
    
    arr =
     [
      12, 7, 5, 23,
      37, 1, 9, 17
    ]
    test =
     [
       1,  5,  7,  9, 12,
      17, 18, 23, 37
    ]
    
    */
    
    
    

    leetcode

    TopK

    https://leetcode.com/problems/top-k-frequent-elements/

    
    "use strict";
    
    /**
     *
     * @author xgqfrms
     * @license MIT
     * @copyright xgqfrms
     * @created 2020-089-15
     * @modified
     *
     * @description 347. Top K Frequent Elements
     * @difficulty Medium
     * @complexity O(n)
     * @augments
     * @example
     * @link https://leetcode.com/problems/top-k-frequent-elements/
     * @link https://leetcode-cn.com/problems/top-k-frequent-elements/
     * @solutions
     *
     */
    
    const log = console.log;
    
    
    /**
     * @param {number[]} nums
     * @param {number} k
     * @return {number[]}
     */
    
    var topKFrequent = function(nums, k) {
      const obj = {};
      const result = [];
      for (let i = 0; i < nums.length; i++) {
        if(!obj.hasOwnProperty(nums[i])) {
          obj[nums[i]] = 1;
        } else {
          obj[nums[i]] += 1;
        }
      }
      const arr = Object.entries(obj).sort((a, b) => a[1] - b[1] > 0 ? -1 : 1);
      return arr.slice(0, k).map(item => parseInt(item[0]));
      // return Object.entries(obj).sort((a, b) => a[1] - b[1] > 0 ? -1 : 1).slice(0, k).map(item => parseInt(item[0]));
    };
    
    

    refs

    https://www.zhihu.com/question/28874340

    https://blog.csdn.net/mashuangwe/article/details/76944143

    array sort

    https://www.cnblogs.com/xgqfrms/p/12440091.html

    facebook hard

    https://leetcode.com/problems/alien-dictionary/



    ©xgqfrms 2012-2020

    www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!


  • 相关阅读:
    win7系统激活最简单方法
    如何删除计算机多系统中不需要了的系统?
    SQL SERVER 中 GO 的用法2
    SQL SERVER 中 GO 的用法
    SQL SERVER中架构的理解
    linux诡异的半连接(SYN_RECV)队列长度
    skbtrace
    IO之流程与buffer 图
    MYSQL 缓存详解 [myownstars] 经典博客
    TCP 函数
  • 原文地址:https://www.cnblogs.com/xgqfrms/p/13670327.html
Copyright © 2020-2023  润新知