【代码随想录】刷题笔记Day34

news2024/12/23 10:07:40

前言

  • 考过概率论,发过一场烧,兜兜转转又一月,轻舟已撞万重山,赶紧刷题

贪心算法理论基础

  • 贪心的本质:局部最优→全局最优
  • 无套路,常识性推导 + 举反例

455. 分发饼干 - 力扣(LeetCode)

  • 先排序,局部最优:最大/小的饼干分给最大/小的小孩,秒了
  • class Solution {
    public:
        int findContentChildren(vector<int>& g, vector<int>& s) {
            sort(g.begin(), g.end());
            sort(s.begin(), s.end());
            int j = s.size() - 1;
            int sum = 0;
            for(int i = g.size() - 1; i >= 0; i--){
                if(j >= 0 && s[j] >= g[i]){
                    sum++;
                    j--;
                }
            }
            return sum;
        }
    };

 376. 摆动序列 - 力扣(LeetCode)

  • 情况一:上下坡中有平坡,取一边的差值等于0
  • 情况二:数组首尾两端,取一个虚拟头,preDiff初始为1
  • 情况三:单调坡中有平坡,遇到拐点再更新prediff
  • class Solution {
    public:
        int wiggleMaxLength(vector<int>& nums) {
            if (nums.size() <= 1) return nums.size();
            int curDiff = 0; // 当前一对差值
            int preDiff = 0; // 前一对差值
            int result = 1;  // 记录峰值个数,序列默认序列最右边有一个峰值
            for (int i = 0; i < nums.size() - 1; i++) {
                curDiff = nums[i + 1] - nums[i];
                // 出现峰值
                if ((preDiff <= 0 && curDiff > 0) || (preDiff >= 0 && curDiff < 0)) {
                    result++;
                    preDiff = curDiff; // 注意这里,只在摆动变化的时候更新prediff
                }
            }
            return result;
        }
    };
  • // 题解来的代码,类似自己起初的思路(可惜自己用flag-1/1调不出来)
    class Solution {
    public:
        int wiggleMaxLength(vector<int>& nums) {
            int res = 0;
            int reverse = 0; //初始不知道第一次会上坡还是下坡
            for(int i = 1; i < nums.size(); i++){
                if(nums[i-1]<nums[i] && reverse != 1){  // 这个≠很精髓
                    res++;
                    reverse = 1;//记录上坡了
                }
                else if(nums[i-1]>nums[i] && reverse != 2){
                    res++;
                    reverse = 2;//记录下坡了
                } 
            }
            return res + 1; //res是两两比较得来的值,差一个边界值要+1
        }
    };

 53. 最大子数组和 - 力扣(LeetCode)

  • 贪心思路:若连续和为负数,则从下一个数重新开始求连续和
  • 注意:用result及时记录连续和的最大值(也可能是负的)
  • class Solution {
    public:
        int maxSubArray(vector<int>& nums) {
            int result = INT32_MIN;
            int count = 0;
            for (int i = 0; i < nums.size(); i++) {
                count += nums[i];
                if (count > result) { // 取区间累计的最大值(相当于不断确定最大子序终止位置)
                    result = count;
                }
                if (count <= 0) count = 0; // 相当于重置最大子序起始位置,因为遇到负数一定是拉低总和
            }
            return result;
        }
    };

后言

  • 第二题死磕太久了,蓝受,一下子就10点了,贪心第一次做好难想哦~ 

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

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

相关文章

Python (六) 绘图

程序员的公众号&#xff1a;源1024&#xff0c;获取更多资料&#xff0c;无加密无套路&#xff01; 最近整理了一波电子书籍资料&#xff0c;包含《Effective Java中文版 第2版》《深入JAVA虚拟机》&#xff0c;《重构改善既有代码设计》&#xff0c;《MySQL高性能-第3版》&…

故障注入测试有哪些多重作用?

在软件开发的世界中&#xff0c;保证系统的鲁棒性和稳定性至关重要。为了应对各种潜在的故障和异常情况&#xff0c;测试团队采用了各种测试方法&#xff0c;其中之一就是故障注入测试。这种测试方法的目标是有目的地向系统引入故障&#xff0c;以评估系统在面对异常情况时的表…

在pom.xml中添加maven依赖,但是类里面import导入的时候报错

问题&#xff1a; Error:(27, 8) java: 类TestKuDo是公共的, 应在名为 TestKuDo.java 的文件中声明 Error:(7, 23) java: 程序包org.apache.kudu不存在 Error:(8, 23) java: 程序包org.apache.kudu不存在 Error:(9, 23) java: 程序包org.apache.kudu不存在 Error:(10, 30) jav…

【VRTK】【VR开发】【Unity】11-甩臂移动

课程配套学习资源下载 https://download.csdn.net/download/weixin_41697242/88485426?spm=1001.2014.3001.5503 【概述】 除了一般的移动能力,VRTK还提供更为沉浸的甩臂移动。 【设定摇杆输入中间件】 在Hierarchy中展开Button Input Actions,其下生成两个新的空子对象…

震撼!这个Python模块竟然能自动修复代码!

说到Python的强大的地方&#xff0c;那真的是太多了&#xff0c;优雅、简洁、丰富且强大的第三方库、开发速度快&#xff0c;社区活跃度高等&#xff0c;所以才使得Python才会如此的受欢迎。 今天给大家介绍一个特别暴力的Python库: FuckIt&#xff0c; 1、FuckIt介绍 FuckI…

接口管理——Swagger

Swagger是一个用于设计、构建和文档化API的工具集。它包括一系列工具&#xff0c;如Swagger Editor&#xff08;用于编辑Swagger规范&#xff09;、Swagger UI&#xff08;用于可视化API文档&#xff09;和Swagger Codegen&#xff08;用于根据API定义生成客户端库、server stu…

文件搜索项目演示

演示功能搜索功能1&#xff1a;根据文件名搜索2&#xff1a;根据文件路径搜索3&#xff1a;根据文件名拼音(全拼、首拼)搜索 选择更新目录功能自动初始化和定时更新功能程序文件项目知识介绍 演示功能 搜索功能 1&#xff1a;根据文件名搜索 2&#xff1a;根据文件路径搜索 3…

Unity中后处理 脚本 和 Shader

文章目录 前言一、我们先创建一个默认的后处理Shader&#xff0c;用于脚本测试二、在脚本中使用Graphics.Blit();1、我们先公开一个材质&#xff0c;用于测试后处理效果2、因为在实际开发中&#xff0c;我们不可能为每一个后处理Shader创建对应的材质球。所以&#xff0c;需要对…

flink-1.17.2的单节点部署

flink 简介 Apache Flink 是一个开源的流处理和批处理框架&#xff0c;用于大数据处理和分析。它旨在以实时和批处理模式高效处理大量数据。Flink 支持事件时间处理、精确一次语义、有状态计算等关键功能。 以下是与Apache Flink相关的一些主要特性和概念&#xff1a; 流处理…

MySQL进阶(MySQL学习笔记)

接上回MySQL基础篇 数据完整性约束 定义完整性约束 实体完整性 主键约束 &#xff08;1&#xff09;作为列的完整性约束 &#xff08;2&#xff09;作为表的完整性约束 2.候选键约束 将id字段和user字段设置为候选键 参照完整性 将classid字段设置为外键 用户定义完整性…

【数据结构第 6 章 ②】- 用 C 语言实现邻接矩阵

目录 一、邻接矩阵表示法 二、AMGraph.h 三、AMGraph.c 四、Test.c 【数据结构第 6 章 ① 】- 图的定义和基本术语-CSDN博客 由于图的结构比较复杂&#xff0c;任意两个顶点之间都可能存在联系&#xff0c;因此无法以数据元素在存储区中的物理位置来表示元素之间的关系&…

内核上项目【通信】

文章目录 目的操作步骤逆向分析实现代码参考文献 目的 在Win7 64位系统上编写驱动利用ExRegisterAttributeInformationCallback注册回调进行通信 操作步骤 1.利用MmGetSystemRoutineAddress获取ExRegisterAttributeInformationCallback中ExpDisSetAttributeInformation、Exp…

detectron2中save_text_instance_predictions⭐

save_text_instance_predictions demo.py中修改关于路径os.path.join()函数用于路径拼接文件路径&#xff0c;可以传入多个路径os.path.basename(path)就是给定一串路径的最终找到的那个文件python官方文档链接 将 Python 对象序列化为 JSON 字符串with open 打开文件&#xff…

基于.NET Core + Quartz.NET+ Vue + IView开箱即用的定时任务UI

前言 定时任务调度应该是平时业务开发中比较常见的需求&#xff0c;比如说微信文章定时发布、定时更新某一个业务状态、定时删除一些冗余数据等等。今天给大家推荐一个基于.NET Core Quartz.NET Vue IView开箱即用的定时任务UI&#xff08;不依赖数据库,只需在界面做简单配…

java--HashMap、LinkedHashMap、TreeMap底层原理

1.HashMap集合的底层原理 ①HashMap跟HashSet的底层原理是一模一样的&#xff0c;都是基于哈希表实现的。 ②实际上&#xff1a;原来学的Set系列集合的底层原理就是基于Map实现的&#xff0c;只是Set集合中的元素只要键数据&#xff0c;不要值数据而已。 2.哈希表 ①JDK8之前…

如何使用nacos进行配置管理以及代码集成

首先需要在maven的pom文件中引入nacos-config依赖 <!--nacos配置管理依赖--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency> 在项目中添加boo…

好用便签有什么软件?好用的便签是什么

在工作中&#xff0c;我经常需要记录一些重要的信息&#xff0c;以便在需要时能够快速查找。但是&#xff0c;我曾经使用过的便签软件总是让我感到不满意&#xff0c;要么功能不够强大&#xff0c;要么使用起来不够方便。我一直在寻找一款好用的便签软件&#xff0c;能够让我事…

使用Kali Linux端口扫描

端口扫描 【实训目的】 掌握端口扫描的基本概念和端口扫描的原理&#xff0c;掌握各种类型端口扫描的方法及其区别。 【场景描述】 在虚拟机环境下配置4个虚拟系统“Win XP1” “Win XP2” “Kali Linux”和“Metasploitable2”&#xff0c;使得4个系统之间能够相互通信。实…

软件兼容性测试:保障多样化用户体验的重要功能

随着移动设备和操作系统的快速发展&#xff0c;软件兼容性测试变得越发重要。这项测试确保软件在不同平台、设备和环境下都能够正常运行&#xff0c;提供一致而稳定的用户体验。下面是软件兼容性测试中的一些关键功能&#xff1a; 1. 跨平台兼容性测试 在不同操作系统上运行的软…

【PHP编程实战】手把手教你如何下载文件,实例代码详解!

本文将向大家详细介绍PHP文件下载实例代码&#xff0c;具有一定的参考价值。对于一个网站而言&#xff0c;文件下载功能几乎是必备的。因此&#xff0c;了解如何使用PHP实现文件下载是非常必要的。在接下来的内容中&#xff0c;我们将一起探讨PHP文件下载的实现方法。 无控制类…