当前位置: 首页 > news >正文

代码随想录算法训练营:28/60

非科班学习算法day28 | LeetCode122:买卖股票的最佳时机|| ,Leetcode55:跳跃游戏 ,Leetcode1005:K次取反后最大化的数组和 


介绍

包含LC的两道题目,还有相应概念的补充。

相关图解和更多版本:

代码随想录 (programmercarl.com)https://programmercarl.com/#%E6%9C%AC%E7%AB%99%E8%83%8C%E6%99%AF


一、LeetCode题目

1.LeetCode122:买卖股票的最佳时机|| 

题目链接:122. 买卖股票的最佳时机 II - 力扣(LeetCode)

题目解析

       还是寻找局部最优解,我发现看例子很重要,看例子我的理解就是:我需要的是找差为正的区间,把他们的差收集起来;同时对于区间段的差,可以分解成每两天的差值,这就可以用for最大程度简化运算

 c++代码如下:

class Solution {
public:// 开贪!-降低跳过-上升向后int maxProfit(vector<int>& prices) {int sum = 0;for (int i = 0; i < prices.size() - 1; ++i) {if (prices[i] < prices[i + 1]) {int temp = prices[i + 1] - prices[i];sum += temp;}}return sum;}
};

注意点1:因为涉及到差,所以区间确定很重要,不要超出范围。

 2.Leetcode55:跳跃游戏 

题目链接:55. 跳跃游戏 - 力扣(LeetCode)

题目解析

       需要注意的就是维护数组的最大范围。

 C++代码如下: 

class Solution {
public:// 都用最大步数看能不能到最后,贪心!--维护最大覆盖范围bool canJump(vector<int>& nums) {if (nums.size() == 1)return true;int cover = 0;for (int i = 0; i <= cover; i++) // 包含cover的右边的那个点{cover = max(cover, i + nums[i]);// 注意这个覆盖范围是下标0开始的,所以是-1if (cover >= nums.size() - 1)return true;}return false;}
};

注意点1:需要注意要遍历到cover的右边的边界那个点

注意点2:不能添加nums的首位是0就false,因为存在一个例子,[0]是直接可以返回的

3.Leetcode1005:K次取反后最大化的数组和

题目链接:1005. K 次取反后最大化的数组和 - 力扣(LeetCode)

题目解析

       思路很重要,贪心的思路在于,想让尽可能的绝对值大的负数变为正数。其次我们需要处理如果次数多出来的话,就要反转绝对值最小的正数。所以需要按照绝对值排序,也算是拓展了以后的做题思路。

C++代码如下:

class Solution {
public://按照绝对值排序static bool cmp(int a, int b){return abs(a)>abs(b);}int largestSumAfterKNegations(vector<int>& nums, int k) {sort(nums.begin(), nums.end(), cmp);for(int i = 0; i<nums.size(); i++){if(nums[i]<0&& k>0){nums[i] = -nums[i];k--;}}if(k%2){nums[nums.size() - 1] = -nums[nums.size() - 1];}int sum = 0;for(int i = 0; i<nums.size();i++){sum+=nums[i];}return sum;}
};

注意点1:这里使用了static将cmp作为全局的静态函数,养成良好的编程习惯。

注意点2:比较重要的技巧就是在遍历的时候,反转负数用k--作为控制变量,这样写更加简洁易懂,条件里加上k>0,这样就不需要添加很多的判断代码,记住这种处理方式。

 

总结


打卡第28天,坚持!!!

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • JAVA中关于compareTo方法的原理深挖
  • 【论文阅读】AsyncDiff: Parallelizing Diffusion Models by Asynchronous Denoising
  • VS2019 因公司加密无法运行程序原因
  • 树莓派4B_OpenCv学习笔记21:OpenCV_haar人脸识别
  • Day1--每日一练
  • P8086 『JROI-5』Music
  • 深入理解外观模式(Facade Pattern)及其实际应用
  • 网络钓鱼中的高级同形异义:网络安全的新威胁
  • 【前端】css控制背景图片缩放
  • C++list的模拟实现
  • 【Python123题库】#统计单词的数量 #各位数字之和为5的数 #输出单词
  • qt 按钮链接一个槽函数
  • 昇思25天学习打卡营第十六天|基于MindSpore的GPT2文本摘要
  • 操作系统---进程的同步和互斥(易错知识点梳理)
  • 银行小额支付系统的全面解析
  • hexo+github搭建个人博客
  • 【译】React性能工程(下) -- 深入研究React性能调试
  • 2018以太坊智能合约编程语言solidity的最佳IDEs
  • CentOS6 编译安装 redis-3.2.3
  • Cumulo 的 ClojureScript 模块已经成型
  • dva中组件的懒加载
  • electron原来这么简单----打包你的react、VUE桌面应用程序
  • RedisSerializer之JdkSerializationRedisSerializer分析
  • SpriteKit 技巧之添加背景图片
  • VirtualBox 安装过程中出现 Running VMs found 错误的解决过程
  • Vue2 SSR 的优化之旅
  • vue自定义指令实现v-tap插件
  • Web设计流程优化:网页效果图设计新思路
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 如何优雅地使用 Sublime Text
  • 入门级的git使用指北
  • 翻译 | The Principles of OOD 面向对象设计原则
  • 树莓派用上kodexplorer也能玩成私有网盘
  • #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  • $(this) 和 this 关键字在 jQuery 中有何不同?
  • $L^p$ 调和函数恒为零
  • $NOIp2018$劝退记
  • (java版)排序算法----【冒泡,选择,插入,希尔,快速排序,归并排序,基数排序】超详细~~
  • (STM32笔记)九、RCC时钟树与时钟 第一部分
  • (二)什么是Vite——Vite 和 Webpack 区别(冷启动)
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • (过滤器)Filter和(监听器)listener
  • (精确度,召回率,真阳性,假阳性)ACC、敏感性、特异性等 ROC指标
  • (三)Kafka离线安装 - ZooKeeper开机自启
  • (十六)Flask之蓝图
  • (四)库存超卖案例实战——优化redis分布式锁
  • (四)模仿学习-完成后台管理页面查询
  • (一)kafka实战——kafka源码编译启动
  • (一)Linux+Windows下安装ffmpeg
  • (原創) 系統分析和系統設計有什麼差別? (OO)
  • (转)为C# Windows服务添加安装程序
  • (转)总结使用Unity 3D优化游戏运行性能的经验
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)