- 455. 分发饼干">455. 分发饼干
- 376. 摆动序列">376. 摆动序列
- 53. 最大子数组和">53. 最大子数组和
- 55. 跳跃游戏">55. 跳跃游戏
- 45. 跳跃游戏 II">45. 跳跃游戏 II
- 1005. K 次取反后最大化的数组和">1005. K 次取反后最大化的数组和
- 134. 加油站">134. 加油站
- 135. 分发糖果">135. 分发糖果
- 860. 柠檬水找零">860. 柠檬水找零
- 406. 根据身高重建队列">406. 根据身高重建队列
- 452. 用最少数量的箭引爆气球">452. 用最少数量的箭引爆气球
- 435. 无重叠区间">435. 无重叠区间
- 763. 划分字母区间">763. 划分字母区间
- 56. 合并区间">56. 合并区间
- 738. 单调递增的数字">738. 单调递增的数字
- 968. 监控二叉树">968. 监控二叉树
455.分发饼干 376摆动序列 53最大子序列和 55跳跃游戏 45跳跃游戏II 1005 K次取反后的最大化数组和 134加油站 135分发糖果 860柠檬水找零 406根据身高重建队列
455. 分发饼干
public int findContentChildren(int[] g, int[] s) {if(s==null||s.length==0){return 0;}Arrays.sort(g);Arrays.sort(s);int res=0;int index=s.length-1;//遍历胃口,先喂饱大胃王for(int i=g.length-1;i>=0;i--){if(s[index]>=g[i]){res++;index--;}}return res;}第二种方式:if(s==null||s.length==0){return 0;}Arrays.sort(g);Arrays.sort(s);int res=0;int index=0;//遍历饼干,小饼干先喂饱小胃口for(int i=0;i<s.length&&index<g.length;i++){if(s[i]>=g[index]){res++;index++;}}return res;
376. 摆动序列
int count=1;int lastDiff=0;int curDiff=0;for(int i=1;i<nums.length;i++){curDiff=nums[i]-nums[i-1];if((curDiff>0&&lastDiff<=0)||(curDiff<0&&lastDiff>=0)){count++;lastDiff=curDiff;}}return count;
53. 最大子数组和
int[]dp=new int[nums.length];int res=nums[0];dp[0]=res;for(int i=1;i<nums.length;i++){dp[i]=Math.max(dp[i-1]+nums[i],nums[i]);res=Math.max(res,dp[i]);}return res;
55. 跳跃游戏
if(nums.length==1){return true;}int cover=0;for(int i=0;i<=cover;i++){cover=Math.max(cover,i+nums[i]);if(i+nums[i]>=nums.length-1){return true;}}return false;
45. 跳跃游戏 II
if(nums.length==1){return 0;}int res=0;int maxCover=0;int curCover=0;for(int i=0;i<nums.length;i++){maxCover=Math.max(i+nums[i],maxCover);if(maxCover>=nums.length-1){res++;break;}if(i==curCover){curCover=maxCover;res++;}}return res;
1005. K 次取反后最大化的数组和
Arrays.sort(nums);int res=0;int index=0;while (index<nums.length){if(nums[index]<0&&k>0){nums[index]=-nums[index];k--;index++;}else{break;}}if(k%2==1){if(index-1<0) {nums[index] = -nums[index];}else if(index==nums.length){nums[index-1]=-nums[index-1];}else if(nums[index]<nums[index-1]){nums[index]=-nums[index];}else{nums[index-1]=-nums[index-1];}}for (int num : nums) {res+=num;}return res;
134. 加油站
int curSum=0;int totalSUm=0;int res=0;for(int i=0;i<gas.length;i++){totalSUm+=(gas[i]-cost[i]);curSum+=(gas[i]-cost[i]);if(curSum<0){res=i+1;curSum=0;}}if(totalSUm<0){return -1;}else{return res;}
135. 分发糖果
int[]dp=new int[ratings.length];Arrays.fill(dp,1);for(int i=1;i<dp.length;i++){if(ratings[i]>ratings[i-1]){dp[i]=dp[i-1]+1;}}for(int i=dp.length-2;i>=0;i--){if(ratings[i]>ratings[i+1]&&dp[i]<=dp[i+1]){dp[i]=dp[i+1]+1;}}int res=0;for (int i : dp) {res+=i;}return res;
860. 柠檬水找零
int fiveCount=0;int tenCount=0;int twentyCount=0;for(int i=0;i<bills.length;i++){if(bills[i]==5){fiveCount++;}else if(bills[i]==10){if(fiveCount==0){return false;}else{fiveCount--;tenCount++;}}else{if(tenCount>=1&&fiveCount>=1){tenCount--;fiveCount--;twentyCount++;}else if(fiveCount>=3){fiveCount-=3;}else{return false;}}}return true;
406. 根据身高重建队列
Arrays.sort(people, new Comparator<int[]>() {@Overridepublic int compare(int[] o1, int[] o2) {if(o1[0]==o2[0]){return o1[1]-o2[1];}else{return o2[0]-o1[0];}}});LinkedList<int[]> res = new LinkedList<>();for (int[] person : people) {res.add(person[1],person);}return res.toArray(new int[res.size()][]);
452. 用最少数量的箭引爆气球
Arrays.sort(points, new Comparator<int[]>() {@Overridepublic int compare(int[] o1, int[] o2) {if(o1[0]<o2[0]){return -1;}else if(o1[0]>o2[0]){return 1;}else{return 0;}}});int res=1;for(int i=1;i<points.length;i++){if(points[i][0]<=points[i-1][1]){points[i][1]=Math.min(points[i][1],points[i-1][1]);}else{res++;}}return res;
435. 无重叠区间
int res=0;Arrays.sort(intervals, new Comparator<int[]>() {@Overridepublic int compare(int[] o1, int[] o2) {if(o1[1]<o2[1]){return -1;}else if(o1[1]>o2[1]){return 1;}else{return o1[0]-o2[0];}}});int last=intervals[0][1];for(int i=1;i<intervals.length;i++){if(intervals[i][0]<last){res++;}else{last=intervals[i][1];}}return res;
763. 划分字母区间
char[] chars = s.toCharArray();int[]dp=new int[26];for(int i=0;i<chars.length;i++){dp[chars[i]-'a']=i;}List<Integer>res=new ArrayList<>();int max=Integer.MIN_VALUE;int last=-1;for(int i=0;i<chars.length;i++) {max = Math.max(max, dp[chars[i] - 'a']);if(i==max){res.add(i-last);last=i;}}return res;
56. 合并区间
Deque<int[]>res=new LinkedList<>();Arrays.sort(intervals, new Comparator<int[]>() {@Overridepublic int compare(int[] o1, int[] o2) {if(o1[0]==o2[0]){return o1[1]-o2[1];}else{return o1[0]-o2[0];}}});res.add(intervals[0]);for(int i=1;i<intervals.length;i++){if(intervals[i][0]<=intervals[i-1][1]){int[] ints = res.pollLast();ints[0]=Math.min(ints[0],intervals[i][0]);ints[1]=Math.max(ints[1],intervals[i][1]);res.addLast(ints);intervals[i]=ints;}else{res.addLast(intervals[i]);}}return res.toArray(new int[res.size()][]);
738. 单调递增的数字
if(n%10==n){return n;}char[] chars = String.valueOf(n).toCharArray();for(int i=chars.length-2;i>=0;i--){if(chars[i]>chars[i+1]){chars[i+1]='9';chars[i]--;}}for(int i=1;i<chars.length;i++){if(chars[i]<chars[i-1]){chars[i]='9';}}String s=new String(chars);return Integer.parseInt(s);
968. 监控二叉树
//1表示该节点安装摄像头,0表示当前节点没有被覆盖,2表示该节点被覆盖int monitor = monitor(root);if(monitor==0){res++;}return res;}private int monitor(TreeNode root){if(root==null){return -1;}int monitorLeft = monitor(root.left);int monitorRight = monitor(root.right);if(monitorLeft==0||monitorRight==0){res++;return 1;}else if(monitorLeft==1||monitorRight==1){return 2;}else{return 0;}}
