BM95 分糖果问题
import java.util.*;
public class Solution {
/**
* pick candy
* @param arr int整型一维数组 the array
* @return int整型
*/
public int candy (int[] arr) {
// write code here
int n=arr.length;
if(n<=1) return n;
int[] nums=new int[n];
for(int i=0;i<n;i++){
nums[i]=1;
}
for(int i=1;i<n;i++){
if(arr[i]>arr[i-1])
nums[i]=nums[i-1]+1;
}
int res=nums[n-1];
for(int i=n-2;i>=0;i--){
if(arr[i]>arr[i+1]&&nums[i]<=nums[i+1]){
nums[i]=nums[i+1]+1;
}
res+=nums[i];
}
return res;
}
}
时间复杂度O(N),空间复杂度O(n)
设置一个nums[n]数组,存放糖果数值
第一次初始化都为1
第二次从头到尾遍历,如果arr[i]>arr[i-1],nums[i]+=1
第三次从尾到头遍历,如果arr[i]>arr[i+1]&&nums[i]<=nums[i+1],则nums[i]+=1
例如arr={8,9,2,3,4,7,3,1,8}
从头到尾遍历后,nums={1,2,1,2,3,4,1,1,2}
从尾到头遍历后,nums={1,2,1,2,3,4,2,1,2}
BM96 主持人调度(二)
import java.util.*;
public class Solution {
public int minmumNumberOfHost (int n, int[][] startEnd) {
int[] start = new int[n];
int[] end = new int[n];
//分别得到活动起始时间
for(int i = 0; i < n; i++){
start[i] = startEnd[i][0];
end[i] = startEnd[i][1];
}
//单独排序
Arrays.sort(start, 0, start.length);
Arrays.sort(end, 0, end.length);
int res = 0;
int j = 0;
for(int i = 0; i < n; i++){
//新开始的节目大于上一轮结束的时间,主持人不变
if(start[i] >= end[j])
j++;
else
//主持人增加
res++;
}
return res;
}
}
时间复杂度 O(nlogn) ,空间复杂度O(n)