从长度为 M 的无序数组中,找出N个最小的数
从长度为 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)
基本思想:(分治)
先从数列中取出一个数作为key值;
将比这个数小的数全部放在它的左边,大于或等于它的数全部放在它的右边;
对左右两个小数列重复第二步,直至各区间只有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 =\n`, arr)
log(`test =\n`, 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 发布文章使用:只允许注册用户才可以访问!
从长度为 M 的无序数组中,找出N个最小的数的更多相关文章
- 从数组中找出第K大的数
利用改进的快排方法 public class QuickFindMaxKValue { public static void main(String[] args) { int[] a = {8, 3 ...
- 数组中找出最小的K个数
题目 给出一个数组,找出K个最小的值 例如给出数组{5,2,4,3,1},给定K值3,则输出结果为{2,3,1} 程序 先给出第一个版本的程序 public static void printKNum ...
- 用C#写一个函数,在一个数组中找出随意几个值相加等于一个值 与迭代器对比
算法!用C#写一个函数,在一个数组中找出随意几个值相加等于一个值比如,数组{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20} 要找出那些数相加等 ...
- Leetcode33--->Search in Rotated Sorted Array(在旋转数组中找出给定的target值的位置)
题目: 给定一个旋转数组,但是你不知道旋转位置,在旋转数组中找出给定target值出现的位置:你可以假设在数组中没有重复值出现 举例: (i.e., 0 1 2 4 5 6 7 might becom ...
- 刷题之给定一个整数数组 nums 和一个目标值 taget,请你在该数组中找出和为目标值的那 两个 整数
今天下午,看了一会github,想刷个题呢,就翻出来了刷点题提高自己的实际中的解决问题的能力,在面试的过程中,我们发现,其实很多时候,面试官 给我们的题,其实也是有一定的随机性的,所以我们要多刷更多的 ...
- C语言 选择排序算法原理和实现 从数组中 找出最小的元素然后交换位置
#include <stdio.h> int main(void) { /* 选择排序算法 原理:从数组中 找出最小的元素然后交换位置: */ int a[10] = {9,5,10,7, ...
- 从数组中找出所有组合为s的数
java版本 package numCombine; /** * 从数组中找出所有组合为s的数 * @author root * */ public class NumComberAll { publ ...
- C语言:对传入sp的字符进行统计,三组两个相连字母“ea”"ou""iu"出现的次数,并将统计结果存入ct所指的数组中。-在数组中找出最小值,并与第一个元素交换位置。
//对传入sp的字符进行统计,三组两个相连字母“ea”"ou""iu"出现的次数,并将统计结果存入ct所指的数组中. #include <stdio.h& ...
- 3sum(从数组中找出三个数的和为0)
Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all un ...
随机推荐
- promise有几种状态,什么时候会进入catch
三个状态:pending.fulfilled.reject两个过程:padding -> fulfilled.padding -> rejected当pending为rejectd时,会进 ...
- UserControl和CustomControl两者区别
UserControl 将多个WPF控件(例如:TextBox,TextBlock,Button)进行组合成一个可复用的控件组: 由XAML和Code Behind代码组成: 不支持样式/模板重写: ...
- hashlib,configparser,logging
# hash: 算法, 结果是什么? 是内存地址, # print(hash('123')) # dic = {'name':'alex'} # print(hash('name')) # print ...
- 20200927gryz校赛心得
今天gyh学长给我们办了一场校内模拟赛,特地跑来记录一下心得 昨天晚上问了一下lkp学长,听说题目不卡常,不毒瘤,因此我在考试前20分钟仍在若无其事的练习着刚学的强连通分量,丝毫不慌 结果虽然rank ...
- Nginx上安装SSL证书
准备 参考 :链接 下载的Nginx证书压缩文件解压后包含: .pem:证书文件.PEM文件的扩展名为CRT格式. .key:证书密钥文件.申请证书时如果未选择自动创建CRS,则下载的证书文件压缩包中 ...
- CS229 Lecture 01
CS229 Lecture notes 01 机器学习课程主要分为4部分:监督学习:学习理论:无监督学习:增强学习. $x^{(i)}$表示特征,$y^{(i)}$表示目标,$i=1...m$.m是训 ...
- Docker --volume(数据持久化)
数据卷 volume 数据卷 是一个可供一个或多个容器使用的特殊目录,实现让容器中的一个目录和宿主机中的一个文件或者目录进行绑定.数据卷 是被设计用来持久化数据的 第一种:bind mount vol ...
- Pytest(11)allure报告
前言 allure是一个report框架,支持java的Junit/testng等框架,当然也可以支持python的pytest框架,也可以集成到Jenkins上展示高大上的报告界面. mac环境: ...
- ogn1.MethodFailedException:Method "xxx" failed for object xxx
问题描述:初学ssh写了个小项目,访问界面出现以下错误 java. lang. NoSuchllethodError: org. hi bernate. SessionF actory. openSe ...
- @AliasFor 注解
Spring 框架提供了很丰富的注解可以让我们很方便的进行 Spring 配置,今天要讲的注解--@AliasFor之前你可能并没有关注过,因为平时开发时我们的确不太会用到. 我关注到这个注解是因为我 ...