目录
将胃口值与饼干进行排序使其从小到大。
从后向前遍历胃口值,并取得此时最大的饼干值,如果饼干大于当前胃口值则将答案res加一,并且将饼干减一。
- class Solution {
- public int findContentChildren(int[] g, int[] s) {
- int res = 0;
- Arrays.sort(s);
- Arrays.sort(g);
- int j = s.length - 1;
- for(int i = g.length - 1;i >= 0;i--){//遍历胃口
- if(j >= 0 && s[j] >= g[i]){
- res++;j--;
- }
- }
- return res;
- }
- }
时间复杂度O(max(nlogn,mlogm))快速排序所占时间复杂度为nlogn与mlogm,遍历g与s所占时间复杂度为n与m
空间复杂度O(max(logn,logm))快速排序所占的额外空间
设置up和down两条子序列,up序列表示到目前为止最后一个元素呈上升的最大序列的长度,down表示到目前为止最后一个元素呈下降的最大序列的长度。遍历nums,如果当前的元素比上一个小,则将down赋值为up加1,代表转换为最后一个元素呈下降的最大序列的长度。如果当前的元素比上一个大,则将up赋值为down加1,代表转换为最后一个元素呈上升的最大序列的长度。
- class Solution {
- public int wiggleMaxLength(int[] nums) {
- int up = 1;//表示到目前为止最后一个元素呈上升的最大序列的长度
- int down = 1;//表示到目前为止最后一个元素呈下降的最大序列的长度
- for(int i = 1;i < nums.length;i++){
- if(nums[i] > nums[i - 1])up = down + 1;//最后一个为下降的最大序列的长度加一,转化为上升的序列
- if(nums[i] < nums[i - 1])down = up + 1;//最后一个为上升的最大序列的长度加一,转化为下降的序列
- }
- return Math.max(up,down);//返回两条子序列中的最大值
- }
- }
时间复杂度O(n)
空间复杂度O(1)
将res赋值为int的最小值,遍历nums,通过sum累加nums中的值,并且每次都判断是否需要更改res的值。如果当前sum的值小于0,说明当前累加值对之后的值一定是负收益,将sum赋值为0,继续进行遍历。
- class Solution {
- public int maxSubArray(int[] nums) {
- int res = Integer.MIN_VALUE;
- int now = 0;
- for(int i = 0;i < nums.length;i++){
- now += nums[i];
- res = Math.max(res,now);
- if(now < 0)now = 0;
- }
- return res;
- }
- }
时间复杂度O(n)
空间复杂度O(1)