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

九易建网站的建站模板晋中网络推广

九易建网站的建站模板,晋中网络推广,丹阳如何做百度的网站,重庆建设工程信息网站非科班学习算法day27 | LeetCode455:分发饼干 ,Leetcode376:摆动序列 ,Leetcode53:最大子数组和 介绍 包含LC的两道题目,还有相应概念的补充。 相关图解和更多版本: 代码随想录 (programmercarl.com)https://programmercarl.c…

非科班学习算法day27 | LeetCode455:分发饼干 ,Leetcode376:摆动序列 ,Leetcode53:最大子数组和 


介绍

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

相关图解和更多版本:

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


二、LeetCode题目

1.LeetCode455:分发饼干 

题目链接:455. 分发饼干 - 力扣(LeetCode)

题目解析

       局部最优的方式是:用当前最大的饼干喂胃口最大的孩子,并依次向后寻找,直到饼干用完或者孩子都吃上。

 c++代码如下:

class Solution {
public:// 数组排序,倒序遍历int count = 0;int findContentChildren(vector<int>& g, vector<int>& s) {sort(g.begin(), g.end());sort(s.begin(), s.end());int max_s = s.size() - 1;for (int i = g.size() - 1; i >= 0; i--) {if (max_s >= 0 && s[max_s] >= g[i]) {count++;max_s--;}}return count;}
};

注意点1:一开始使用的是双循环然后还用break,很难控制,而且后来改对了但是容易超时。所以这里学习了使用标记位置的方法,满足条件就减去一个饼干

注意点2:这里孩子或者饼干的数量是没有固定关系的,所以都可能遍历完,for循环里控制的是孩子的遍历结束,而max_s>=0控制的是饼干的遍历结束

 2.Leetcode376:摆动序列 

题目链接:376. 摆动序列 - 力扣(LeetCode)

题目解析

       我认为代码随想录中这道题的做法有点分类复杂了,虽然最后的代码呈现很简单,分为了三种情况去考虑;我学习了一种写法,我觉得理解更为容易,因为我们需要根据局部峰值的数量来统计全局最优的数量,那么也就是说只需要比较一个点前后两个坡度的正负,甚至值的大小都不重要;还有一个点就是怎么处理相等(平坡)?可以直接跳过循环,比分类要容易的多。

 C++代码如下: 

class Solution {
public:// 开贪!--局部最优为删除坡度中间值--全局最优统计峰值局部峰值个数int wiggleMaxLength(vector<int>& nums) {// 前坡int preDiff = 0;// 后坡int curDiff = 0;// 计数变量int count = 1;// 处理异常if (nums.size() <= 1)return nums.size();// 统计拐角for (int i = 0; i < nums.size() - 1; ++i) {curDiff = nums[i + 1] - nums[i];if ((preDiff >= 0 && curDiff < 0) ||(preDiff <= 0 && curDiff > 0)) {count++;preDiff = curDiff;}}return count;}
};

 简易c++代码如下:

class Solution {
public:// 开贪!--也是统计局部峰值int wiggleMaxLength(vector<int>& nums) {// 初始化计数变量int count = 1;// 初始化前坡int preDiff = 0;// 初始化后坡int curDiff = 0;// 处理异常if (nums.size() <= 1)return nums.size();// 大于等于两个的序列for (int i = 1; i < nums.size(); ++i) {if (nums[i] == nums[i - 1])continue;curDiff = (nums[i] > nums[i - 1]) ? 1 : -1;count += curDiff != preDiff;preDiff = curDiff;}return count;}
};

注意点1:这里运用了三目运算符,简化了代码写法,主要的意思就是,我们在遇到相等的时候已经跳过了,那么现在就看是正是负,值不重要

注意点2:在统计量做增加操作的时候,完全可以写成if的形式,这里是用了先用bool返回1或者0,然后做调整操作。

3.Leetcode53:最大子数组和

题目链接:53. 最大子数组和 - 力扣(LeetCode)

题目解析

       首先利用暴力遍历的方法,可以计算每一个元素作为开头的子数组的最大和,然后用一个全局变量实时维护。

C++代码如下:

class Solution {
public:// 暴力求解int max_sum = INT_MIN;int maxSubArray(vector<int>& nums) {for (int i = 0; i < nums.size(); ++i) {int sum = 0;for (int j = i; j < nums.size(); ++j) {sum += nums[j];max_sum = max(max_sum, sum);}}return max_sum;}
};

贪心c++代码如下:

class Solution {
public:// 开贪!遇到总和为负的就重新开始int max_sum = INT_MIN;int sum = 0;int maxSubArray(vector<int>& nums) {for (int i = 0; i < nums.size(); ++i) {sum += nums[i];if (sum > max_sum) {max_sum = sum;}if (sum <= 0) {sum = 0; // 初始化--重新统计最大}}return max_sum;}
};

 注意点1:容易陷入误区,认为如果全是负数的序列就会返回0,但实际上维护的是max_sum,所以不存在该问题,仍然会返回序列单个最大值作为结果。

总结


打卡第27天,坚持!!!

http://www.yayakq.cn/news/314802/

相关文章:

  • 调用别人网站注册表单建设网站时 首先要解决两个问题 一是什么
  • .湖南省建设厅规范网站企业门户网站需求模板
  • 网站关键词词库怎么做app定制公司如何找客户
  • 网站开发技术及应用wordpress user level
  • 开源社区的发展前景正规seo服务商
  • 做网站需要的设备wordpress页面标题标签
  • 网站建设企划书重庆企业网站设计制作
  • 莒南县建设工程网站wordpress如何设置边栏
  • 宁波 商城网站建设山东网站优化推广
  • 住房和城乡建设部中国建造师网站网站开发的硬件环境
  • 濮阳建设公司网站如何建设移动端网站
  • 品牌网站建设大概费用建立网站坐等访问者发现
  • 南昌网站建设方案网站做好了怎么办
  • 个人怎么做课程网站电子商务网站帮助中心该怎么更好地设计
  • 网站建设签收单软件工程师是做什么的
  • 宁波优质网站制作哪家好东莞房价2023最新价格
  • 电子商务网站建设素材wordpress 简约企业
  • 重庆营销型网站建设价格做网站推广托管注意
  • 做生意网站最新国际新闻 大事件
  • 聊城网站建设包括哪些公司专业做网站
  • 精品课程网站建设项目验收单用代码做一号店网站怎么做
  • 上海网站建设口碑好衡水网站建设多少钱
  • 网站建设中哪些最重要有限公司网站建设 中企动力佛山
  • 网站域名包括网页设计服装网站建设
  • 手机网站设计技巧wordpress中文版书籍
  • 网站开发原型模板福州网站建设fjfzwl
  • 交互式手机网站响应网站 整屏
  • 番禺做网站要多少钱微信附近人推广引流
  • 手机能搭建网站吗无症状感染者会自愈吗
  • 广州专业做网站公司网站网页设计怎样