leetcode-347-394

leetcode347题394题

leetcode347题题目:

给定一个非空的整数数组,返回其中出现频率前 k 高的元素。

示例:

示例1:

输入:nums = [1,1,1,2,2,3], k = 2

输出:[1,2]

示例2:

输入:nums = [1], k = 1

输出:[1]

解答:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
var topKFrequent = function(nums, k) {
function Node(n,c){
this.num = n;
this.count = c;
}
var obj = {};
for(var i=0;i<nums.length;i++){
if(obj[nums[i]]==undefined){
obj[nums[i]]=new Node(nums[i],1);
}else{
obj[nums[i]].count++;
}
}
var arr = [];
for(var prop in obj){
arr.push(obj[prop]);
}
arr.sort(compare);
var result = [];
for(var i=0;i<k;i++){
var index = arr.length-1-i;
result.push(arr[index].num);
}
return result;
};
function compare(a,b){
return a.count-b.count;
}

leetcode394题题目:

给定一个经过编码的字符串,返回它解码后的字符串。

编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。

你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。

此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像 3a 或 2[4] 的输入。

示例:

s = “3[a]2[bc]”, 返回 “aaabcbc”.
s = “3[a2[c]]”, 返回 “accaccacc”.
s = “2[abc]3[cd]ef”, 返回 “abcabccdcdcdef”.

解答:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
var decodeString = function(s) {
while(s.indexOf(']')!=-1){
var indexEnd = s.indexOf(']');
var indexStart = indexEnd;
while(s[indexStart]!='['){
indexStart--;
}
var nums = [];
var index = indexStart;
while(!isNaN(parseInt(s[index-1]))&&index!=0){
nums.push(s[index-1]);
index--;
}
var num = parseInt(nums.reverse().join(''));
var result = '';
for(var i=0;i<num;i++){
var str = s.substring(indexStart+1,indexEnd);
result = result+str;
}
s = s.substring(0,index)+result+s.substring(indexEnd+1,s.length);
}
return s;
};

艾丽.范宁

分享到