代码随想录27天|贪心

news2024/12/26 11:04:05

455.分发饼干

代码随想录

第一想法

将孩子胃口值g[i] 按从小到达的顺序排列,饼干尺寸也按照从小到大的顺序去排列。

优先将大尺寸喂给大胃口孩子。如果满足不了胃口那么久试着分给下一个孩子。

要尽量满足更多的孩子,那么大尺寸的饼干就不能喂给小胃口的孩子

这里的局部最优就是大饼干喂给胃口大的,充分利用饼干尺寸喂饱一个,全局最优就是喂饱尽可能多的小孩

代码

虽然知道倒着分配的基本思路,但是还是非常出错。关键在于遍历孩子作为主体。

遍历孩子还是遍历饼干要在纸上模拟一遍。

class Solution {
    public int findContentChildren(int[] g, int[] s) {
        Arrays.sort(g);
        Arrays.sort(s);
        int count = 0;
        int start = s.length-1;//目前有这么多饼干
        for(int index = g.length-1;index>=0;index--){//从胃口最大的孩子开始分发
            if(start>=0&&g[index]<=s[start]){//如果还有饼干且能满足的话
                start--;
                count++;
            }
        }
        return count;
    }
}

 376.摆动序列

代码随想录

代码随想录

preddiff =  nums[i] - nums[i-1]

curdiff = nums[i+1] - nums[i]

在峰值出现的要保留 即prediff>0&&curdiff<0 || prediff<0&&curdiff>0

上下有平坡只取最右一侧,则 prediff>=0&&curdiff<0  || prediff<=0 &&curdiff >0

首尾元素: 首尾元素不相同算两个摆动,因此直接用i = 0 || i = nums.leng()-1 判断是否为首尾元素直接加摆动是错误的。

        比如数组 [1 2] , 在左边延长 1 即[1 1 2],因此真正的首元素第二个1 可以通过计算prediff 和 curdiff 判断得出,而默认右侧就是有一个摆动序列,即count初始值为1

prediff和curdiff 的计算:当前元素判断完后逻辑上已经移动到下一个元素,那么curdiff就可以赋值给prediff,而prediff初始值为0,但是这样在单调有平坡时会出现问题/

单调坡中有平坡 [1 2 2 2 3 4],摆动为2,prediff不是跟着curdiff实时摆动,而是在摆动出现时只记录坡度的初始方向,也就是prediff = curdiff 写在if逻辑里,那么当碰到 [1 2]段时prediff = 1 ,而后两个 2 时prediff都不会变化。

代码

class Solution {
    public int wiggleMaxLength(int[] nums) {
        if(nums.length==1)return 1;
        int result = 1; //默认最右侧有摆动,初始值为1
        int prediff = 0;//默认延长首元素
        int curdiff = 0;
        for(int i = 0;i<nums.length-1;i++){
            curdiff = nums[i+1]-nums[i];
            if((prediff<=0&&curdiff>0)||(prediff>=0&&curdiff<0)){
                result++;
                prediff = curdiff;
            }
        }
        return result;
    }
}

 53.最大子序和

第一想法

从起始开始加,如果比原来更大则接收,并同时记录数组长度,如果一旦变小那么就归零重新计算。想法是找到一个连续子序和大的,那么基于它应该能找到更大的。

但是例如数组 [5,4,-1,7,8] ,需要短暂接收 -1 ,最终最大子序和是所有数值相加 即23.

或者双层for循环,枚举所有的子序和,时间复杂度为 n^2

代码随想录

遍历数组时会累加连续和 ,如果连续和是负数 ,加后面的数只会让后面的数更小,对求值不利。例如 -2 1 ,-2 +1 < 1,那么不如使用1作为新起点。

局部最优:当连续和为负数的时候,立即抛弃它,选择下一个数作为新的起点

全局最优:子序和最大 

贪在哪里

这题贪心的核心就是,以当前的子序和为视角,每次选择时都可能让子序和更大: 当子序和负数时,替换新子序和,因为无论如何加下一个数都不如直接选下一个数成为新子序和大 当子序和正数时,直接加新数字,因为无论如何替换下一个数都不如当前子序和加数字大 很经典地体现了 “贪” 的特点,目标就是要让子序和尽可能大!

——B友 杏吧阿伟 

从编程到哲学

[妙啊]

我我我悟到了一个道理!当我们遇到困难的时候(负数)不要逃避(跳过负数),我们试着去接受它(加入连续和),然后尝试更好地未来;如果遇到了太多的伤心事(连续和变成负数了),那都是些没有办法改变的事情,我们不如卸下包袱(连续和归0),然后奔赴一个新的起点(新的连续和起点)

——B友 猫猫灵机一动时

代码

class Solution {
    public int maxSubArray(int[] nums) {
        int result = Integer.MIN_VALUE;//求解最大子序和,先将比较结果初始为最小值
        int sum = 0;
        for(int i = 0;i<nums.length;i++){
            sum +=  nums[i];
            if(sum>result)result = sum;
            if(sum<0) sum = 0;//如果当前子序和为负数,立即归零,选择下一个数作为新起点
        }
        return result;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1974775.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PMP–知识卡片--燃起图

燃起图用两条曲线分别绘制随时间的推移、完成的工作量和总工作量的变化情况。它不仅能清晰地展示项目进度&#xff0c;还是对团队成员的一种激励形式。 使用燃起图可以更好地了解进度、范围变更和预期完成时间&#xff0c;它为所有相关方提供了更清晰的进度状态。 燃起图根据工…

抖音豆包大模型AI写作教程

简数采集器支持调用字节跳动抖音的豆包AI大模型API接口&#xff0c;用于对采集的数据进行研究分析&#xff0c;内容写作等。 抖音豆包大模型AI写作使用教程&#xff1a; 目录 1.启用豆包AI大模型API功能 2.设置豆包API处理规则 3.应用API规则处理数据 4.获取AI处理结果 1…

算法 一

时间复杂度 常数操作&#xff1a;和数量无关&#xff0c;每次都是固定时间内完成。 只要高阶项&#xff0c;也不要高阶项的系数。 选择排序、冒泡排序 选择排序&#xff1a;以第一位为起点&#xff0c;每次选择最小的数放在最前面&#xff0c;起点向后挪一位。 冒泡排序&…

冰山的崛起:数据架构的转变

像 Apache Iceberg、Apache Hudi 和 Delta Lake 这样的开放表格式已成为查询处理器的事实标准。然而&#xff0c;最近有消息称 Snowflake 和 Databricks 等查询引擎采用了 Iceberg 的 REST 目录 API&#xff0c;这改变了竞争环境&#xff0c;有利于 Iceberg。 Iceberg的成功不仅…

国内自闭症学校:寻找最适合您孩子的选择

当您的孩子被诊断为自闭症&#xff0c;为他们寻找一所合适的学校就成为了您至关重要的任务。在国内&#xff0c;有各种各样的自闭症学校&#xff0c;每所学校都有其独特的特点和优势。然而&#xff0c;如何在众多的选择中找到最适合您孩子的那一所&#xff0c;并非易事。 您需要…

【数据结构算法经典题目刨析(c语言)】顺序表和链表的区别(图文详解)

&#x1f493; 博客主页&#xff1a;C-SDN花园GGbond ⏩ 文章专栏&#xff1a;数据结构经典题目刨析(c语言) 目录 顺序表和链表的区别 一、底层存储空间 二、插入和删除操作 三、随机访问 四、空间利用率 五、应用场景 六、高速缓存 为什么顺序表的缓存利用率高于链表呢…

windows 文件夹下的文件名称全部输入到txt文件中(已解决)

打开cmd 命令行&#xff0c;记住一定是cmd命令行 进入cmd 目前在C盘&#xff0c;跳转D盘&#xff0c;输入d:。 d: 回车&#xff1b; 在输入或者粘贴你的目的路径 我的是 D:\opencv****\build\x64\vc14\lib&#xff0c;回车进入目的路径。 然后 再输入&#xff1a;dir /b &…

windows环境下安装docker与jenkins进行单机简易安装

CI/CD流水线简易实战 技术工具: Git Jenkins Docker Git Git是一个开源的分布式版本控制系统&#xff0c;用于敏捷高效地处理任何规模的项目。 GitHub是在线的基于Git的代码托管服务。GitHub于2008年由Ruby on Rails编写而成。GitHub同时提供付费账户和免费账户。这两种账户都…

包装类(String、StringBuffer、StringBuilder) 重点

包装类&#xff08;Wrapper Class&#xff09;是Java中的一个重要概念&#xff0c;它们是用于将基本数据类型&#xff08;如int, char, double等&#xff09;封装成对象的类。使用包装类的主要目的是为了能够更好地与Java的集合框架&#xff08;如ArrayList、HashMap等&#xf…

Modelsim仿真之VCD文件详解

目录 一、前言 二、VCD文件格式 2.1 头部 2.2 变量定义 ​ 2.3 值打印 2.4 值变化部分 2.5 VCD文件示例 三、VCD文件生成 3.1 工程代码 3.2 modelsim操作 3.3 VCD结果查看 3.4 VCD类型2 四、参考资料 一、前言 ​VCD&#xff08;Value change dump&#xff09;…

mv:自动对焦代码

try:# The camera will now focus on whatever is in front of it.sensor.ioctl(sensor.IOCTL_TRIGGER_AUTO_FOCUS) except:raise (Exception("Auto focus is not supported by your sensor/board combination."))

说说ip地址和mac地址的区别

随着互联网的飞速发展&#xff0c;网络连接已成为我们日常生活中不可或缺的一部分。然而&#xff0c;在享受网络带来的便利时&#xff0c;你是否曾好奇过那些让设备能够相互通信的关键技术&#xff1f;IP地址与MAC地址&#xff0c;作为网络通信中的两大基石&#xff0c;它们各自…

2023华为od机试C卷【API集群负载统计】Python实现

思路 统计第二层级上computing出现的次数的时候&#xff0c;只需要for循环寻找computing是否在字典的键中。 如果找到&#xff0c;计数的时候是加上computing对应的值 def main():import collectionslength_char int(input())node_info {}for i in range(length_char):char…

### 微软的传奇与未来:从车库到云端的飞跃

今天我要和大家聊聊科技界的超级明星——微软。这家公司几乎每个人都听过&#xff0c;从90年Windows全家桶&#xff0c;到现在的云端革命&#xff0c;微软的故事简直有点儿像科技界的“美国梦”。 #### **车库里的梦想** 一切都得从1975年说起。当时&#xff0c;比尔盖茨和保…

【博客22】缤果Android_USB串口调试助手V1.0(高级篇)

超级好用的Android_USB调试助手 ( Android Studio Java) 开发工具: android-studio-2022.2.1.20-windows.exe usb-serial-for-android 目录 一、软件概要&#xff1a; 二、软件界面&#xff1a; 1.App演示 2.其他扩展展示 2.1 USB枚举 2.2 波特率 2.3 自定义指令集 2.…

一种别样的Unicode Python编码方式,完美转换表情和阿拉伯语

我们可能有时候在处理字符时需要处理到非ASCII的字符&#xff0c;比如将表情、阿拉伯语转换为Unicode字符&#xff0c;从而避免在传输时会出现乱码的情况。 Unicode验证网站&#xff1a; unicode转换网站 目的&#xff1a;转换下面除ASCII字符外的字符为Unicode字符&#x1f…

Upload-labs靶场Pass01-Pass21全解

文章目录 Pass-01 前端JSJS绕过上传或者用burp抓包的方式 Pass-02 MIME检测Pass-03 特殊文件后缀黑白名单绕过特殊文件名绕过 Pass-04 .htacess上传Pass-05 user.ini文件上传Pass-06 大小写绕过Pass-07 空格绕过Pass-08 .绕过Pass-09 ::$DATA绕过Pass-10 .空格.绕过Pass-11 双写…

⾃定义类型:联合和枚举详解

本章讲述的是自定义类型中联合和枚举&#xff0c;在本章我们将会认识联合体&#xff0c;枚举的声明&#xff0c;使用&#xff0c;以及联体的大小&#xff0c;枚举类型的优点。 1.联合体 1.联合体类型的声明 像结构体⼀样&#xff0c;联合体也是由⼀个或者多个成员构成&#…

重新设计 Baklib 中的分析数据处理

数据库是任何应用程序性能最关键的部分之一。当谈到 Baklib 时&#xff0c;考虑到高度可扩展的 SaaS 环境&#xff0c;我们总是致力于提高应用程序的性能。 我们不断尝试提高应用程序的性能&#xff0c;在密切监视应用程序是否有任何挫折和改进的同时&#xff0c;我们发现每天…

推动未来的引擎:人工智能大模型的现状与发展

推动未来的引擎&#xff1a;人工智能大模型的现状与发展 一、引言 随着人工智能技术的迅速发展&#xff0c;人工智能大模型作为其中的重要组成部分&#xff0c;正逐渐成为推动科技进步的重要引擎。无论是在自然语言处理、计算机视觉&#xff0c;还是智能推荐等领域&#xff0…