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

国家摄影网站crm客户关系管理平台

国家摄影网站,crm客户关系管理平台,深圳最近几天的新闻大事,贵阳网站建设贵阳网站建设哪家好目录 1.不同路径 题解 2140. 解决智力问题 题解 2873. 有序三元组中的最大值 题解 1.不同路径 链接:62. 不同路径 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步…

目录

1.不同路径

题解

2140. 解决智力问题

题解

2873. 有序三元组中的最大值 

题解


1.不同路径

链接:62. 不同路径

一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。

机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。

问总共有多少条不同的路径?


题解

这个机器人位于左上角位置,每次只能向右和向下移动

  • 问从开始位置到终点一共有多少种不同的路径。
  • 我们下标从1开始计数,这样就少了很多边界情况。

接下来我们用记忆化搜索解决这个问题。

如果纯记忆化搜索我们只要两步就可以了。

  • 第一步 先想出暴搜(递归)的代码。
  • 第二步 暴搜代码改成记忆化搜索,但是前提是能否改!

1.暴搜(递归)

我们最后向求出的m,n位置有多少种不同的走法

  • 那么就这样搞dfs,dfs我给你两个参数,dfs(i,j)
  • 你直接给我返回1,1到达i,j有多少种走法。

具体dfs你内部怎么走我不关心,我相信你一定能够完成任务。

  • 接下来想想这个函数体 如何设计,我想从1,1到达这个三角的位置一共有多少种方式,其实只用关心两个位置就可以。
  • 因为想到达三角的位置,必须要从这两个圆圈到达,要求只能向右走向下走。
  • 如果此时我知道到达圆圈有多少种方式那在多走一步就走到三角了。
  • 也就是说到达圆圈有多少种方式,到达这个三角也有多少种方式。

因此仅需要达到两个圆圈有多少种方式加起来就是到达三角位置的方式 dfs(i-1,j) + dfs(i,j-1)。

递归出口 我们考虑某个位置的时候,我们仅会考虑它上面的位置以及左边的位置。

  • 有可能i=1的时候去考虑i-1不就越界了吗
  • i=0的时候不能从非法位置达到这里。
  • 同理j=0也是一种非法情况,我们既要考虑上边也要考虑左边。因此

i == 0 || j == 0 return 0;

但还有一种隐藏递归出口

  • 当i == 1 && j == 1的时候是位于起点的
  • 上面和左边都没有所以需要特殊处理 i == 1 && j == 1 return 1
class Solution {
public:int uniquePaths(int m, int n) {//爆搜return dfs(m,n);}int dfs(int m,int n){//出口if(m==0 || n==0) return 0;if(m==1 && n==1) return 1;return dfs(m-1,n)+dfs(m,n-1);}
};

上面会超时,下面看看能否暴搜的代码改成记忆化搜索。

在递归过程种发现大量重复的相同问题就可以用记忆化搜索

记忆化搜索

我们发现在递归过程种发现大量重复的相同问题因此可以用记忆化搜索

搞一个备忘录

  • 递归之前,查找一下备忘录
  • 返回之前,把结果存在备忘录中

搞一个备忘录 上一道题是搞一个一维数组,但是这道题dfs函数里面是有两个可变参数,i和j一直在变化。

  • 里面的值是int,因此我可以搞一个int [m+1][n+1] 二维数组。
  • 因为要访问到m,n的位置。

进前 瞅瞅。return 前 存存

class Solution {
public:vector<vector<int>> memo;int uniquePaths(int m, int n) {//记忆化搜索memo.resize(m+1,vector<int>(n+1,0));return dfs(m,n);}int dfs(int m,int n){if(memo[m][n]) return memo[m][n];//出口if(m==0 || n==0) return 0;if(m==1 && n==1) return 1;memo[m][n]=dfs(m-1,n)+dfs(m,n-1);return dfs(m-1,n)+dfs(m,n-1);}
};

解下来把记忆化搜索改成动态规划。

  1. 多加一层的 初始化
  2. 循环内 要注意起点的值 continue ,防止被修改

2140. 解决智力问题

链接:2140. 解决智力问题

给你一个下标从 0 开始的二维整数数组 questions ,其中 questions[i] = [pointsi, brainpoweri]

这个数组表示一场考试里的一系列题目,你需要 按顺序 (也就是从问题 0 开始依次解决),针对每个问题选择 解决 或者 跳过 操作。解决问题 i 将让你 获得 pointsi 的分数,但是你将 无法 解决接下来的 brainpoweri 个问题(即只能跳过接下来的 brainpoweri 个问题)。如果你跳过问题 i ,你可以对下一个问题决定使用哪种操作。

  • 比方说,给你 questions = [[3, 2], [4, 3], [4, 4], [2, 5]]
    • 如果问题 0 被解决了, 那么你可以获得 3 分,但你不能解决问题 12
    • 如果你跳过问题 0 ,且解决问题 1 ,你将获得 4 分但是不能解决问题 23

请你返回这场考试里你能获得的 最高 分数。


题解

刚好今天的每日一题

  • 暴力 选 or 不选 会超时

class Solution {
public:typedef long long ll;queue<vector<int>> q;ll ret;long long mostPoints(vector<vector<int>>& questions) {//dpdfs(questions,0,0);return ret;}void dfs(vector<vector<int>>& questions,int p,ll count){if(p>=questions.size()) //向下 再向上 //暴力 是会经历两次的{ret=max(ret,count);return;}
//选dfs(questions,p+questions[p][1]+1,count+questions[p][0]);
//不选dfs(questions,p+1,count); } 
};

采用 记忆化搜索,记录 结果的记忆化递归,避免 重复进行

class Solution 
{int n = 0;unordered_map<int, long long> memo;
public:long long dfs(vector<vector<int>>& questions, int pos){if (pos >= n)return 0;if (memo.count(pos))return memo[pos];// 选 - 跳到 pos + brain + 1long long ret = questions[pos][0] + dfs(questions, pos + questions[pos][1] + 1);// 不选 - 跳到 pos + 1ret = max(ret, dfs(questions, pos + 1));memo[pos] = ret; //记录 结果的记忆化递归return ret;}long long mostPoints(vector<vector<int>>& questions){n = questions.size();return dfs(questions, 0);}
};

采用动态规划,优化


2873. 有序三元组中的最大值 

链接:2873. 有序三元组中的最大值 I

给你一个下标从 0 开始的整数数组 nums

请你从所有满足 i < j < k 的下标三元组 (i, j, k) 中,找出并返回下标三元组的最大值。如果所有满足条件的三元组的值都是负数,则返回 0

下标三元组 (i, j, k) 的值等于 (nums[i] - nums[j]) * nums[k]


题解

暴力

class Solution {
public:typedef long long ll;long long maximumTripletValue(vector<int>& nums) {//暴力ll ret=0;int n=nums.size();for(int i=0;i<n-2;i++){for(int j=i+1;j<n-1;j++){for(int k=j+1;k<n;k++){ret = max(ret,(ll)(nums[i] - nums[j]) * nums[k]);//!!!强转}}}return ret;}
};

注意 max 比较对 ll 的强转~

解法二:

类比:11.盛水最多的容器

利用单调性来进行空间换时间

class Solution {
public:typedef long long ll;long long maximumTripletValue(vector<int>& nums) {//利用单调性int n=nums.size();if (n < 3) return 0;  // 🌟 新增边界条件ll ret=0;vector<int> max_left(n,0);  //ivector<int> max_right(n,0);  //k//空间换时间for(int j=1;j<n;j++){max_left[j]=max(max_left[j-1],nums[j-1]);
//!!!!!存储当前位置所对应的最大左右值}for(int j=n-2;j>=0;j--){max_right[j]=max(max_right[j+1],nums[j+1]);}for(int j=1;j<n-1;j++){ret=max(ret,(ll)(max_left[j]-nums[j])*max_right[j]);}return ret;}
};

//!!!!!存储当前位置所对应的最大左右值


文章转载自:

http://LTmJuHUK.qfkdt.cn
http://jLU8kLCK.qfkdt.cn
http://KEEsdH8Y.qfkdt.cn
http://ojnGEk49.qfkdt.cn
http://NEc2pqec.qfkdt.cn
http://gy8A3TAj.qfkdt.cn
http://euzZ79N7.qfkdt.cn
http://vA0muj74.qfkdt.cn
http://88AzKQ4g.qfkdt.cn
http://oLPOwUY4.qfkdt.cn
http://8SJfXkGe.qfkdt.cn
http://w56DN9xn.qfkdt.cn
http://QSuHslZD.qfkdt.cn
http://aKRWrqY8.qfkdt.cn
http://FEdVeXdL.qfkdt.cn
http://zfyuj1Qk.qfkdt.cn
http://L2XOK4CD.qfkdt.cn
http://L9bBByqN.qfkdt.cn
http://VtR87Gv5.qfkdt.cn
http://ocAqqeMW.qfkdt.cn
http://jcd7oIME.qfkdt.cn
http://AdFSQzs1.qfkdt.cn
http://cp3i74Tf.qfkdt.cn
http://7CQ8OAIu.qfkdt.cn
http://DZyFSoZF.qfkdt.cn
http://TwyoNd5b.qfkdt.cn
http://hsGgIgrT.qfkdt.cn
http://q0Zkltgj.qfkdt.cn
http://bMxocZcw.qfkdt.cn
http://vnpnLhNy.qfkdt.cn
http://www.dtcms.com/wzjs/714602.html

相关文章:

  • 青岛网站推广企业专门做试题的网站
  • 深圳网站制作公司哪家好北京专业网站制作流程优势
  • 网站转应用dedecms 网站地图 模板
  • 河南郑州广告公司网站建设滕州市建设网站
  • 仿木鱼网络网站施工企业怎样报考a证
  • 成都市建设路小学网站商企在线营销型网站
  • 国际商业网站松江区网站建设
  • 万能搜索引擎网站上海网站建设公司官网
  • 石家庄长安区网站建设公司电脑做网站服务器改端口
  • 做网站需要了解什么软件软件开发与应用
  • 移动网站cmswordpress theme
  • 网站主页的要素手机网站 底部菜单
  • 导航网站分析网页设计购物网站模板
  • 合益环保东莞网站建设室内设计效果图制作软件
  • 网站建设最新模板下载wordpress them8主题
  • 怎样在国外网站购买新鲜橙花做纯露食品包装设计价格
  • 做网站找什么公司工作淘宝客自己做网站
  • 树形结构网站案例军事新闻最新消息中国南海今天
  • 什么网站能免费做简历世界500强企业排名2022
  • 外贸没有公司 如何做企业网站去哪里注册商标和品牌
  • 做资料分享网站wordpress首页分页
  • 大连金普新区规划建设局网站学生个人网页设计主题
  • 郑州中色十二冶金建设有限公司网站宁波做外贸网站建设
  • 一是加强了网站建设北京市政建设集团有限责任公司网站
  • 软文网站开发成都学生网站制作
  • 杭州哪里做网站网站设计公司哪家便宜
  • 怎样维护网站建设全网浏览器
  • 网站建设的原则有哪些内容软文写作服务
  • 网站优化软件费用网站建设中html网页
  • 怎么做商务网站的架构泰安网站建设推荐