题目
- 一维数组的动态和
- 不同整数的最少数目
思路与算法
- 第一题没啥好说的,动态和,dp最基础的东西。
- 第二题主要是一个贪心的过程,既然要剩下的不同整数的数目最小,则踢出的数字的频次最小时需要的次数最少,因此想到HashMap加贪心来实现即可。具体见代码注释
代码实现
- 一维数组的动态和
class Solution {
public int[] runningSum(int[] nums) {
int len = nums.length;
int[] res = new int[len];
res[0] = nums[0];
for (int i = 1; i < len; i++) {
res[i] = res[i-1] + nums[i];
}
return res;
}
}
- 不同整数的最少数目
package com.immunize.leetcode.week193;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
public class Solution2 {
public int findLeastNumOfUniqueInts(int[] arr, int k) {
Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < arr.length; i++) {
if (map.containsKey(arr[i])) {
map.replace(arr[i], map.get(arr[i]) + 1);
} else {
map.put(arr[i], 1);
}
}
if (k == 0) {
return map.size();
}
int[] freq = new int[map.size()];
int a = 0;
for (int key : map.keySet()) {
freq[a++] = map.get(key);
}
Arrays.sort(freq);
int i = 0;
int res = 0;
for (i = 0; i < freq.length; i++) {
if (k - freq[i] >= 0) {
k = k - freq[i];
} else
break;
}
res = freq.length - i;
return res;
}
}
写在最后
- 学长们陆续毕业,希望自己可以向优秀的学长学姐学习,充实好自己的研学生活。