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

卓越网站建设的优点营销计划怎么写

卓越网站建设的优点,营销计划怎么写,vip会员货源批发网站,如何快速建设推广网站代码随想录算法训练营 —day28 文章目录 代码随想录算法训练营前言一、122.买卖股票的最佳时机II二、55. 跳跃游戏三、跳跃游戏 II方法一方法二 1005. K 次取反后最大化的数组和总结 前言 今天是算法营的第28天,希望自己能够坚持下来! 今日任务&#x…

代码随想录算法训练营

—day28

文章目录

  • 代码随想录算法训练营
  • 前言
  • 一、122.买卖股票的最佳时机II
  • 二、55. 跳跃游戏
  • 三、跳跃游戏 II
    • 方法一
    • 方法二
  • 1005. K 次取反后最大化的数组和
  • 总结


前言

今天是算法营的第28天,希望自己能够坚持下来!
今日任务:
● 122.买卖股票的最佳时机II
● 55. 跳跃游戏
● 45.跳跃游戏II
● 1005.K次取反后最大化的数组和


一、122.买卖股票的最佳时机II

题目链接
文章讲解
视频讲解

思路:
计算相邻两天的利润,只收集正利润就是总的最佳收益

class Solution {
public:int maxProfit(vector<int>& prices) {int sum = 0;//计算相邻两天的利润,只收集正利润for (int i = 1; i < prices.size(); i++) {//if (prices[i] - prices[i - 1] > 0) sum += prices[i] - prices[i -1]; sum += (max(prices[i] - prices[i - 1], 0)); //这种写法也是很妙,代替了if}return sum;}
};

二、55. 跳跃游戏

题目链接
文章讲解
视频讲解

思路:

  1. 不需要具体去考虑跳到了那个元素底下,只需要统计最大的覆盖范围就可以了
  2. 从0开始遍历覆盖范围cover,更新最大覆盖范围(当前元素能覆盖到的范围是i+nums[i])
  3. 如果cover覆盖到数组末尾了,说明能够跳到末尾。

代码如下:

class Solution {
public:bool canJump(vector<int>& nums) {int cover = 0;if (nums.size() == 1) return true; //只有一个元素,就是能到达for (int i = 0; i <= cover; i++) { //注意这里是小于等于covercover = max(i + nums[i], cover); //取当前覆盖范围和当前遍历元素可以跳跃的范围中最大值作为新的覆盖发哪位if (cover >= nums.size() - 1) return true; //说明覆盖范围到终点了,可以跳到终点}return false;}
};

三、跳跃游戏 II

题目链接
文章讲解
视频讲解

方法一

思路:
首先题目是默认都可以跳到末尾的,而求的是最少跳几次。
沿用上一题的覆盖的思想,但这道题遍历的是整个数组。
1.用next记录下一跳覆盖的最远下标,用cur记录本轮覆盖的最远下标
2.遍历数组,记录遍历过程中的最远下标(用于下一跳)
3.当遍历到本轮负该的最远下标,说明需要下一跳来增大覆盖距离了,此时result++并更新cur,cur = next;
4.当本轮最远下标大于等于数组末尾的时候,说明本轮可以到达末尾了,不需要再遍历(寻找下一跳最远下标)了,直接break。

代码如下:

class Solution {
public:int jump(vector<int>& nums) {if (nums.size() == 1) return 0;int result = 0; //记录要跳多少次int cur = 0; //当前覆盖的最远距离下标int next = 0; //下一跳覆盖的最远下标for (int i = 0; i < nums.size(); i ++) {next = max(i + nums[i], next); //遍历每一个下标,记录下一跳覆盖最远下标//当前已经遍历到本次最远距离的下标if (i == cur) {result++; //说明需要跳一下次cur = next; //更新当前覆盖最远距离下标if (cur >= nums.size() - 1) break; //当前覆盖最远距离已经到达终点,次数也在上面记录了,不需要再遍历了}}return result;}
};

方法二

因为题目是默认一定会跳到最后的,所以其实不需要判断最后一次的最远覆盖下标有没有超过数组末尾。
方法就是遍历的时候只遍历到倒数第二位,因为如果遍历到倒数第二位,

  • i == cur的话,说明还差最后一跳就到末尾了,此时result++。
  • i !=cur的话,那么说明cur已经超过数组了,当前的result就是结果。

在这里插入图片描述
在这里插入图片描述

代码如下:

class Solution {
public:int jump(vector<int>& nums) {if (nums.size() == 1) return 0;int result = 0; //记录要跳多少次int cur = 0; //当前覆盖的最远距离下标int next = 0; //下一跳覆盖的最远下标for (int i = 0; i < nums.size() - 1; i ++) {next = max(i + nums[i], next); //遍历每一个下标,记录下一跳覆盖最远下标//当前已经遍历到本次最远距离的下标if (i == cur) {result++; //说明需要跳一下次cur = next; //更新当前覆盖最远距离下标// if (cur >= nums.size() - 1) break;  不需要判断了,因为遍历范围控制在了[0, nums.size()-1],}}return result;}
};

1005. K 次取反后最大化的数组和

题目链接
文章讲解
视频讲解

思路:

  1. 将数组按绝对值从大到小排列
  2. 遍历数组,遇到负值的话就取反
  3. 如果还有剩余的k,对绝对值最小的数进行取反(只需判断k是否为奇数,奇数只取反1次)
  4. 最后遍历数组求和

代码如下:

class Solution {
//自定义比较函数,绝对值大的排前面
static bool cmp (int a, int b) {return abs(a) > abs(b);
}public:int largestSumAfterKNegations(vector<int>& nums, int k) {sort(nums.begin(), nums.end(), cmp); //将数组按照绝对值大小从大到小排序for (int i = 0; i < nums.size(); i++) { //遍历数组,如果是负数,则取反,k--if (nums[i] < 0 && k > 0) {nums[i] *= -1;k--;}}//如果k还没用完,判断k是否为奇数,奇数则取反最后一位绝对值最小的数if (k % 2 == 1) nums[nums.size() - 1] *= -1; int result = 0;//遍历求和for (int num:nums) {result += num;}return result;}
};

总结

贪心算法第二天,依旧难的是思路,而且即使知道思路,代码中也有许多细节需要注意。

明天继续加油!

http://www.hrbkazy.com/news/21697.html

相关文章:

  • 怎么做网站推广林芝地区智慧营销系统平台
  • 济南建立网站如何创建自己的卡网
  • 网站建设找谁做seo入门教程网盘
  • 如何引流与推广常州百度关键词优化
  • 建设淘宝优惠券网站seo伪原创工具
  • 做网站高手网络推广策划方案怎么写
  • 网站头像有啥做会清晰东莞网站建设优化诊断
  • 青海高端网站建设公司seo网络贸易网站推广
  • 免费页面网站制作进入百度首页
  • 培训机构前端优化网站排名解析推广
  • css3做的网站软文营销方案
  • 中国建筑查询平台seo 是什么
  • 订购网站开发价格直播发布会
  • 滁州医院网站建设费用站长之家统计
  • 阿里巴巴官网网站seo网站结构优化的方法
  • 免费网站seo诊断东莞网络营销全网推广
  • 做公司网站大概需要多少钱啊免费推广平台排行
  • 青海省高速公路建设管理局网站郑州网络优化实力乐云seo
  • 做网站不备案会怎样丁香人才网官方网站
  • 你知道吗信阳seo
  • 网站员工风采关键词工具
  • 网站做几级等保投放广告怎么投放
  • 上海市建设咨询协会网站云南网站推广公司
  • 网站推广指标包括( )。网络营销有哪些方式
  • wordpress做企业官网网站排名优化专业定制
  • 域名注册后网站建设爱站网seo综合查询工具
  • 个人工作室网站焊工培训班
  • 公司变更函模板宁波seo网络推广优化价格
  • 手机访问不了自己做的网站营销网站制作
  • 安徽php网站建设长沙百度关键词搜索