首页 > 其他分享 >代码随想录训练营Day31:● 理论基础 ● 455.分发饼干 ● 376. 摆动序列 ● 53. 最大子序和

代码随想录训练营Day31:● 理论基础 ● 455.分发饼干 ● 376. 摆动序列 ● 53. 最大子序和

时间:2024-03-29 22:33:40浏览次数:26  
标签:count nums int 随想录 455 start ++ length 子序

理论基础

贪心基础

455.分发饼干

题目链接

https://leetcode.cn/problems/assign-cookies/description/

题目描述

在这里插入图片描述

思路

自己写的,因为没有事先对两个数组进行排序,所以出现了问题

class Solution {
    public int findContentChildren(int[] g, int[] s) {
        Arrays.sort(s);
        Arrays.sort(g);
       ArrayList<Integer> list = new ArrayList<>();
        for (int i = 0; i < s.length; i++) {
            list.add(s[i]);
        }
        int count = 0;
        for (int i = 0; i < g.length; i++) {
            Iterator<Integer> iterator = list.iterator();
            while (iterator.hasNext()) {
                Integer integer = iterator.next();
                if (g[i] <= integer) {
                    count++;
                    iterator.remove();
                    break;
                }
            }
        }
        return count;
    }
}

1、

public static int findContentChildren(int[] g, int[] s) {
        //优先考虑大胃口,大饼干先喂饱大胃口
        Arrays.sort(g);
        Arrays.sort(s);
        int count = 0;
        int start = s.length-1;
        for (int i = g.length-1; i >= 0;i--) {
            if(i>=0&&g[i]<=s[start]){
                start--;
                count++;
            }
        }
        return count;
}

2、

public static int findContentChildren(int[] g, int[] s) {
        
        //优先考虑饼干,小饼干先喂饱小胃口
        Arrays.sort(g);
        Arrays.sort(s);
        int count = 0;
        int start = 0;
        for (int i = 0; i < s.length&&start<g.length; i++) {
            if(s[i]>=g[start]){
                start++;
                count++;
            }
        }
        return count;
    }

376. 摆动序列

题目链接

https://leetcode.cn/problems/wiggle-subsequence/description/

题目描述

在这里插入图片描述

思路

在这里插入图片描述

有点小懵

class Solution {
    public int wiggleMaxLength(int[] nums) {
        if (nums.length <= 1) {
            return nums.length;
        }
        //当前差值
        int curDiff = 0;
        //上一个差值
        int preDiff = 0;
        int count = 1;
        for (int i = 1; i < nums.length; i++) {
            //得到当前差值
            curDiff = nums[i] - nums[i - 1];
            //如果当前差值和上一个差值为一正一负
            //等于0的情况表示初始时的preDiff
            if ((curDiff > 0 && preDiff <= 0) || (curDiff < 0 && preDiff >= 0)) {
                count++;
                preDiff = curDiff;
            }
        }
        return count;
    }
}

53. 最大子序和

题目链接

https://leetcode.cn/problems/maximum-subarray/description/

题目描述

在这里插入图片描述

思路

在这里插入图片描述

//result 存放最后的结果
//count用来统计每次累加的结果
//遍历数组,如果和为负数了,就将前边的丢掉,从下一个重新开始计算
class Solution {
    public int maxSubArray(int[] nums) {
        int result = Integer.MIN_VALUE;
        int count = 0;
        for (int i = 0; i < nums.length; i++) {
            count += nums[i];
            if(count>result) result = count;
            if(count<0) count = 0;
        }
        return result;
    }
}

这个代码太厉害了,就用了这几行!!!

标签:count,nums,int,随想录,455,start,++,length,子序
From: https://blog.csdn.net/m0_45352814/article/details/137002745

相关文章

  • 代码随想录训练营Day36:● 435. 无重叠区间 ● 763.划分字母区间 ● 56. 合并区间
    435.无重叠区间题目链接https://leetcode.cn/problems/non-overlapping-intervals/description/题目描述思路直接统计重叠区间的个数,就是需要删除的个数publicinteraseOverlapIntervals(int[][]intervals){Arrays.sort(intervals,(a,b)->Integer.com......
  • 代码随想录算法训练营第6天 | 哈希表
    哈希表理论基础用法:一般哈希表都是用来快速判断一个元素是否出现集合里,哈希法牺牲了空间换取了时间,因为我们要使用额外的数组,set或者是map来存放数据,才能实现快速的查找eg:例如要查询一个名字是否在这所学校里,要枚举的话时间复杂度是O(n),但如果使用哈希表的话,只需要O(1)就可......
  • 代码随想录算法训练营第六十天 | 84.柱状图中最大的矩形
      84.柱状图中最大的矩形 已解答困难 相关标签相关企业 给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为1。求在该柱状图中,能够勾勒出来的矩形的最大面积。 示例1:输入:heights=[2,1,5,6,2,3]输出:10......
  • 代码随想录算法训练营第二十四天(回溯1)|77. 组合(JAVA)
    文章目录回溯理论基础概念类型回溯模板77.组合解题思路源码回溯理论基础概念回溯是递归的副产品,本质上是一种穷举回溯解决的问题可以抽象为一种树形结构类型回溯主要用来解决以下问题组合问题:N个数里面按一定规则找出k个数的集合切割问题:一个字符串按一定......
  • 代码随想录算法训练营第二十三天(二叉树9)|669. 修剪二叉搜索树、108. 将有序数组转换为
    文章目录669.修剪二叉搜索树解题思路源码108.将有序数组转换为二叉搜索树解题思路源码538.把二叉搜索树转换为累加树解题思路源码669.修剪二叉搜索树给你二叉搜索树的根节点root,同时给定最小边界low和最大边界high。通过修剪二叉搜索树,使得所有节点的值......
  • 【力扣】300. 最长递增子序列(DFS+DP两种方法实现)
    目录题目传送最长递增子序列[DFS方法]DFS方法思路图思路简述代码大家可以自行考虑有没有优化的方法最长递增子序列[DP]方法DP方法思路图思路简述代码方案题目传送原题目链接最长递增子序列[DFS方法]DFS方法思路图思路简述对于序列中的每一个数字只有选择......
  • 代码随想录算法训练营第五十九天 | 42. 接雨水,503下一个更大元素
    503.下一个更大元素II 已解答中等 相关标签相关企业 给定一个循环数组 nums ( nums[nums.length-1] 的下一个元素是 nums[0] ),返回 nums 中每个元素的 下一个更大元素 。数字 x 的 下一个更大的元素 是按数组遍历顺序,这个数字之后的......
  • CF455A
    Boredom题面翻译题目描述给定一个有$n$个元素的序列${a_n}$。你可以做若干次操作。在一次操作中我们可以取出一个数(假设他为$x$)并删除它,同时删除所有的序列中值为$x+1$和$x-1$的数。这一步操作会给玩家加上$x$分。输入输出格式输入格式:第一行一个整数$n(1\len\le......
  • 10天【代码随想录算法训练营34期】 第五章 栈与队列part01(● 232.用栈实现队列 ● 22
    232.用栈实现队列classMyQueue:def__init__(self):self.queue=[]self.size=0defpush(self,x:int)->None:self.queue.append(x)self.size+=1defpop(self)->int:self.size-=1retur......
  • 代码随想录学习Day 20
    669.修剪二叉搜索树题目链接讲解链接思路:采用递归方法,若root.val>high,判断左子树是否为空,若不空,递归遍历左子树,若空就返回null;若root.val<low,则判断右子树是否为空,若不空就递归遍历右子树,若空就返回null;如果low<=root.val<=high,就递归遍历左右子树,最后返回根节点即......