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

网站建设自关键词优化seo费用

网站建设自,关键词优化seo费用,安装下载app,跨境电商平台是什么文章目录一、前言二、概述三、打家劫舍第一晚四、打家劫舍第二晚五、打家劫舍第三晚......一、前言 大家好久不见,正如标题所示,今天我不打算聊一些枯燥的算法理论,我们来聊一聊程序员有多厉害! 注意!!&am…

文章目录

  • 一、前言
  • 二、概述
  • 三、打家劫舍第一晚
  • 四、打家劫舍第二晚
  • 五、打家劫舍第三晚......

一、前言

大家好久不见,正如标题所示,今天我不打算聊一些枯燥的算法理论,我们来聊一聊程序员有多厉害!

注意!!!:本文诣在讲解动态规划里的打家劫舍问题,无任何不良导向!!!

二、概述

一个月黑风高的夜晚~,你回到了村庄,你是一名资深的程序员,你工作认真努力,但苦于老板压迫,生活常常捉襟见肘,于是你的内心萌生了罪恶的想法!你准备在这个村庄里打劫!

三、打家劫舍第一晚

第一天晚上,你来到了一个村庄,你计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的 唯一制约因素 就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。而你想要在一夜之内偷取最高金额。
在这里插入图片描述

聪明的你知道如果报警器响起会发生什么,所以你打算运用你作为程序员的聪明才智来帮助你完成打劫!

于是你简单分析了街道房屋的构成,并将其抽象为了数组,简单分析报警器就可以知道,只要不偷相邻元素的钱就不会触发报警!

在这里插入图片描述
看过前两期动态规划的你,立马就意识到这是一个动态规划问题,没看过也没关心,你稍微动了一下脑筋,梳理出来以下思路:

✔️dp数组
在第0间~第 i 间房子内,要遵守相邻房间不能偷的原则,偷得最大金额!这个i是会变化的,所以你决定使用一个dp数组来保存你能偷的最大金额

dp[i] 表示: 第0间房子~第i间房子内按照规则能偷取的最大金额

✔️状态转移
片刻后,你决定要偷一共i间房子的钱,并打听好了每间房子有多少钱可以偷(value)。

于是你想,若要求dp[i],无非就两种情况:

1. 偷第i家

2.不偷第i家

1.那如果偷第i家,根据规则,相邻房间不能再偷,所以第i-1家就要避开

  • dp[i] = dp[i-2] + value[i]

2.那如果不偷第i家,根据规则,i-1家就不需要避开

  • dp[i] = dp[i-1];

而我们只需要在上述两种情况下选金额较大的即是dp[i]的值!因此状态转移方程即为:

dp[i] = max(dp[i-1],dp[i-2] + value[i]);

到这里,你不禁感叹不愧是程序员,轻松做到了其他人做不到的事情!

✔️初始化
推导出上述动态转移方程,你就自然而然想到前两个元素要初始化,那初始化为什么好呢,回顾了一下dp数组的含义,你顺利完成了初始化

  • dp[0] = value[0];
  • dp[1] = max(value[0],value[1]);

简单解释一下:

你只有一间房子可选,你就说你选不选吧~
不能都选,但总得选个贵的吧~

✨参考代码

class Solution {
public:int rob(vector<int>& nums) {if(nums.size() == 0) return 0;if(nums.size() == 1) return nums[0];vector<int> dp(nums.size());dp[0] = nums[0];dp[1] = max(nums[0],nums[1]);for(int i = 2;i<nums.size();i++){dp[i] = max(dp[i-2]+nums[i],dp[i-1]);}return dp[nums.size()-1];}
};

四、打家劫舍第二晚

昨晚你作案非常顺利,成功拿到了最大金额,为了避免被别人发现,第二天你来到了一个新的村庄,村庄结构变成了一个环形!,你同样不能偷相邻房间的钱!!

在这里插入图片描述
你分析了一下,发现这个村庄的构成与上个村庄非常相似,只是首尾相连了而已,那这样的变化会带来什么问题呢?

很简单,无非就是选择了第一家就不能偷最后一家,选择了最后一家,就一定不能偷第一家。

在这里插入图片描述这样,你成功将一个环形结构拆成了两个队列结构,只要分别求出他们,选择最大的那个即可!

那分别求每一个队列的过程,和你第一天的情况完全一致,你也很轻松的偷到了最多的钱。

class Solution {
public://抽象第一天的过程int robRange(vector<int>& nums,int start,int end){if (end == start) return nums[start];vector<int> dp(nums.size());dp[start] = nums[start];dp[start+1] = max(nums[start],nums[start+1]);for(int i = start+2;i<=end;i++){dp[i] = max(dp[i - 2] + nums[i], dp[i - 1]);}return dp[end];}int rob(vector<int>& nums) {if (nums.size() == 0) return 0;if (nums.size() == 1) return nums[0];int result1 = robRange(nums, 0, nums.size() - 2); // 第一个队列int result2 = robRange(nums, 1, nums.size() - 1); //第二个队列return max(result1, result2);//选择最大的那个啦!!!}
};

五、打家劫舍第三晚…

鉴于你前两晚作案都非常顺利,不出所料,第三天晚上你再次来到了一个村庄,这次村庄结构竟然变成了二叉树!!作为程序员的你马上就兴奋了起来,那么你到底能不能顺利偷得第三个村庄,拿到最多钱呢。

在这里插入图片描述

欲知后事如何,且听下节课分解!!!大家可以先自己想一想,下次我们先学会二叉树的基本知识,再来偷最后的村子!

如果你感觉本篇文章对你有所帮助,可以点赞 + 收藏 +关注 支持一下学者哦~ 我们下次再见~

http://www.15wanjia.com/news/40318.html

相关文章:

  • 门户网站用什么程序做沧州网站建设推广
  • 江山有做网站开发吗谷歌浏览器 安卓下载2023版
  • 企业站seo哪家好品牌的宣传及推广
  • 个人导航网站源码网络推广主要是做什么工作
  • 网页设计作业可爱的家乡成品网站源码的优化技巧
  • 网站建设刂搜金手指下拉贰伍查权重工具
  • 坛墨网站建设网站空间
  • 手机网站登录模板seo关键词排名优化教程
  • 可视化编辑建站平台cilimao磁力猫
  • 网站整体地图怎么做引流客户的最快方法是什么
  • 查询网站是否做301今日重庆重要消息
  • 网站建设的公司哪家好呢搜索引擎是网站吗
  • 织梦 网站复制商丘优化公司
  • 网站你的后台管理系统用什么做小程序开发哪家好
  • 淘宝网站那个做的北京优化互联网公司
  • 万网域名价格南京广告宣传公司seo
  • 做c 题的网站企业网站怎么做
  • 阳江市住房和城乡建设局网站厦门seo报价
  • 烟台网站制作企业关键词的作用
  • 个人网站开发人员网站发布
  • 乐云seo百度关键词优化和百度推广
  • 唐山公司网站建设 中企动力唐山百度知道官网入口
  • 石家庄视频网站建设公司营销技巧和营销方法培训
  • wordpress迁移后地址没变晋中网站seo
  • 温州h5建站电子商务网站设计方案
  • 泉州建设网站公司百度竞价推广怎么做
  • 网站首页特效付费推广
  • 模板网站官网苏州优化排名seo
  • 烟台电子商务网站网站seo查询站长之家
  • b2c商城用户的操作流程和作用是什么多少关键词排名优化软件