5436. 一维数组的动态和
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;
}
}
5437. 不同整数的最少数目
class Solution {
public int findLeastNumOfUniqueInts(int[] arr, int k) {
if(arr==null|| arr.length<=0) {
return 0;
}
Map<Integer,Integer> maps = new TreeMap<Integer,Integer>();
int len = arr.length;
int max = 1;
for(int i=0;i<len;i++) {
if(maps.containsKey(arr[i])) {
int count = maps.get(arr[i])+1;
max = max>count?max:count;
maps.put(arr[i], maps.get(arr[i])+1);
}else {
maps.put(arr[i], 1);
}
}
int totoalNum = maps.size();
ArrayList[] sorted = new ArrayList[max+1];
for(int i=0;i<sorted.length;i++){
sorted[i] = new ArrayList(); //数组的每一个元素都要new一个List对象,来初始化
}
for(Map.Entry<Integer,Integer> entry : maps.entrySet()) {
int count = entry.getValue();
sorted[count].add(entry.getKey());
}
int currCount = 0;
int currSum = 0;
for(int i=1;i<=max;i++) {
ArrayList<Integer> currArr = sorted[i];
int currArrSize = currArr.size();
for(int j=0;j<currArrSize;j++) {
currSum += i;
if(currSum<=k) {
currCount++;
}else {
return totoalNum-currCount;
}
}
}
return 0;
}
}
5438. 制作 m 束花所需的最少天数
这题没做出来,赛后参考了别人的解题思路:参考链接
class Solution {
public int minDays(int[] bloomDay, int m, int k) {
int len = bloomDay.length;
if(m*k>len) {
return -1;
}
// 最大等待的天数是数组里的最大值
int max = 0;
for(int i=0;i<len;i++) {
max =Math.max(max, bloomDay[i]);
}
// 最小等待0天
int min=0;
while(min<max) {
int mid = (max-min)/2+min;
// 等待mid天,有多少组连续的k朵花已经开花🌼了
int count = getCount(bloomDay, mid, k);
if(count>=m) {
max = mid;
}else {
min = mid+1;
}
}
return min;
}
// 返回等待day天,有多少组连续的k天<=day 这里用的贪心
private int getCount(int[] bloomDay, int day, int k) {
int re = 0;
int count = 0;
for(int i=0;i<bloomDay.length;i++) {
if(bloomDay[i]<=day) {
count++;
}else {
count = 0;
}
// 连续的k朵花🌼开了
if (count == k) {
re ++;
count=0;
}
}
return re;
}
}