十分暴力的方法,没想到竟然没超时
var topKFrequent = function(nums, k) {
const map = new Map();
for(let props of nums){
const temp = map.get(props);
map.set(props, !temp?1:temp+1);
}
const map2 = new Map();
const arr = [];
const arr2 = [];
map.forEach((item, key)=>{
arr.push(item);
arr2.push(key);
})
for(let i=arr.length-1;i>=0;i--){
for(let j=1;j<=i;j++){
if(arr[j]>arr[j-1]){
[arr[j],arr[j-1]] = [arr[j-1],arr[j]];
[arr2[j],arr2[j-1]] = [arr2[j-1],arr2[j]];
}
}
}
return arr2.slice(0,k);
};
本来想优化一下嘞,结果时间更长了。
var topKFrequent = function(nums, k) {
const map = new Map();
const map2 = new Map();
const result = [];
for(let props of nums){
const temp = map.get(props);
const num = !temp ? 1 : temp+1;
map.set(props, num);
if(!temp){
result.push(props);
map2.set(props, result.length-1);
}else{
let idx = map2.get(props);
while(idx!==0&&num>map.get(result[idx-1])){
[result[idx], result[idx-1]] = [result[idx-1], result[idx]];
map2.set(result[idx], idx);
idx--;
}
map2.set(props, idx);
}
}
return result.slice(0,k);
};
优化了一下,思路和第一种差不多,我以前一直想排序map来着,可以不太会,今天终于会了。
var topKFrequent = function(nums, k) {
let map = new Map();
for(let num of nums){
map.set(num, map.has(num) ? map.get(num)+1 : 1);
}
if(k === map.size)return [...map.keys()];
let arr = Array.from(map).sort((a,b)=>b[1]-a[1]);
return arr.slice(0,k).map(n => n[0]);
};