动态规划算法练习题

45. 跳跃游戏 II

中等

2K

相关企业

给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]

每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说,如果你在 nums[i] 处,你可以跳转到任意 nums[i + j] 处:

  • 0 <= j <= nums[i] 
  • i + j < n

返回到达 nums[n - 1] 的最小跳跃次数。生成的测试用例可以到达 nums[n - 1]

示例 1:

输入: nums = [2,3,1,1,4]
输出: 2
解释: 跳到最后一个位置的最小跳跃数是 2。从下标为 0 跳到下标为 1 的位置,跳 1步,然后跳 3步到达数组的最后一个位置。

示例 2:

输入: nums = [2,3,0,1,4]
输出: 2

提示:

  • 1 <= nums.length <= 104
  • 0 <= nums[i] <= 1000
  • 题目保证可以到达 nums[n-1]

int jump(int* nums, int numsSize){int *dp=(int *)malloc(sizeof(int)*numsSize);dp[0]=0;for(int i = 1 ; i < numsSize ; i++ ){dp[i] =  numsSize + 1;}for(int i =1; i< numsSize; i++){for(int j = 0; j < i; j++){if(j + nums[j] >= i){dp[i] = fmin(dp[i],dp[j]+1);}}}return dp[numsSize-1];}

97. 交错字符串

相关企业

给定三个字符串 s1s2s3,请你帮忙验证 s3 是否是由 s1 和 s2 交错 组成的。

两个字符串 s 和 t 交错 的定义与过程如下,其中每个字符串都会被分割成若干 非空 子字符串:

  • s = s1 + s2 + ... + sn
  • t = t1 + t2 + ... + tm
  • |n - m| <= 1
  • 交错 是 s1 + t1 + s2 + t2 + s3 + t3 + ... 或者 t1 + s1 + t2 + s2 + t3 + s3 + ...

注意:a + b 意味着字符串 a 和 b 连接。

示例 1:

输入:s1 = "aabcc", s2 = "dbbca", s3 = "aadbbcbcac"
输出:true

示例 2:

输入:s1 = "aabcc", s2 = "dbbca", s3 = "aadbbbaccc"
输出:false

示例 3:

输入:s1 = "", s2 = "", s3 = ""
输出:true

提示:

  • 0 <= s1.length, s2.length <= 100
  • 0 <= s3.length <= 200
  • s1s2、和 s3 都由小写英文字母组成

bool isInterleave(char * s1, char * s2, char * s3){int len1=strlen(s1),len2=strlen(s2),len3=strlen(s3),dp[105][105]={0};if(len3!=(len1+len2)){return false;}dp[0][0]=1;for(int i=0;i<=len1;i++){for(int j=0;j<=len2;j++){int p=i+j-1;if(i>0){if(dp[i-1][j]==1&&s3[p]==s1[i-1])dp[i][j]=1;}if(j>0){if(dp[i][j-1]==1&&s3[p]==s2[j-1])dp[i][j]=1;}}}return dp[len1][len2];
}

131. 分割回文串

中等

1.4K

相关企业

给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 。返回 s 所有可能的分割方案。

回文串 是正着读和反着读都一样的字符串。

示例 1:

输入:s = "aab"
输出:[["a","a","b"],["aa","b"]]

示例 2:

输入:s = "a"
输出:[["a"]]

提示:

  • 1 <= s.length <= 16
  • s 仅由小写英文字母组
      int dp[20][20]={0};void dfs(char* s, int len, int begin, char*** ans, int* returnSize, int* returnColumnSizes, char** temps, int* tempsSize) {if(begin==len){char** tmp = malloc(sizeof(char*) * (*tempsSize));for (int j = 0; j < (*tempsSize); j++) {int tempsColSize = strlen(temps[j]);tmp[j] = malloc(sizeof(char) * (tempsColSize + 1));strcpy(tmp[j], temps[j]);}ans[*returnSize] = tmp;returnColumnSizes[(*returnSize)++] = *tempsSize;return;}for (int j = begin; j < len; ++j) {if (dp[begin][j]==1) {char* temp = malloc(sizeof(char) * (j - begin + 2));for (int k = begin; k <= j; k++) {temp[k - begin] = s[k];}temp[j - begin + 1] = '\0';temps[(*tempsSize)++]=temp;dfs(s, len, j + 1, ans, returnSize, returnColumnSizes, temps, tempsSize);--*(tempsSize);}}
    }char*** partition(char* s, int* returnSize, int** returnColumnSizes) {int i,j,len=strlen(s);int retMaxLen = len * (1 << len);for(i=0;i<20;i++){for(j=0;j<20;j++){dp[i][j]=0;}}char*** ans = malloc(sizeof(char**) * retMaxLen);*returnSize = 0;*returnColumnSizes = malloc(sizeof(int) * retMaxLen);for(i=len-1;i>=0;i--){for(j=i;j<len;j++){if(s[i]==s[j]){if(i==j)dp[i][j]=1;if(j-i==1){dp[i][j]=1;}if(j-i>1){if(dp[i+1][j-1]==1){dp[i][j]=1;}}}}}char* temps[len];int tempsSize=0;dfs(s, len, 0, ans, returnSize, *returnColumnSizes, temps, &tempsSize);return ans;
    }

139. 单词拆分

中等

1.9K

相关企业

给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s 。

注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。

示例 1:

输入: s = "leetcode", wordDict = ["leet", "code"]
输出: true
解释: 返回 true 因为 "leetcode" 可以由 "leet" 和 "code" 拼接成。

示例 2:

输入: s = "applepenapple", wordDict = ["apple", "pen"]
输出: true
解释: 返回 true 因为 "applepenapple" 可以由 "apple" "pen" "apple" 拼接成。注意,你可以重复使用字典中的单词。

示例 3:

输入: s = "catsandog", wordDict = ["cats", "dog", "sand", "and", "cat"]
输出: false

提示:

  • 1 <= s.length <= 300
  • 1 <= wordDict.length <= 1000
  • 1 <= wordDict[i].length <= 20
  • s 和 wordDict[i] 仅有小写英文字母组成
  • wordDict 中的所有字符串 互不相同

bool wordBreak(char * s, char ** wordDict, int wordDictSize){int len=strlen(s),falg=0;int dp[301]={0};dp[0]=1;for(int i=0;i<len;i++){for(int j=0;j<wordDictSize;j++){int n=strlen(wordDict[j]);if(n>(len-i)){continue;}falg=1;for(int k=0;k<n;k++){if(s[i+k]!=wordDict[j][k]){falg=0;}}if(falg==1&&dp[i]==1){dp[i+n]=1;}}}if(dp[len]==1)return true;return false;
}

221. 最大正方形

中等

1.4K

相关企业

在一个由 '0' 和 '1' 组成的二维矩阵内,找到只包含 '1' 的最大正方形,并返回其面积。

示例 1:

输入:matrix = [["1","0","1","0","0"],["1","0","1","1","1"],["1","1","1","1","1"],["1","0","0","1","0"]]
输出:4

示例 2:

uploading.4e448015.gif

正在上传…重新上传取消转存失败重新上传取消

输入:matrix = [["0","1"],["1","0"]]
输出:1

示例 3:

输入:matrix = [["0"]]
输出:0

提示:

  • m == matrix.length
  • n == matrix[i].length
  • 1 <= m, n <= 300
  • matrix[i][j] 为 '0' 或 '1'

暴力超时:

int maximalSquare(char** matrix, int matrixSize, int* matrixColSize){int max=0;int m=matrixSize,n=matrixColSize[0];for(int i=0;i<m;i++){for(int j=0;j<n;j++){if(matrix[i][j]=='1'){printf(" %d %d ",i,j);for(int b=1;i+b<=m&&j+b<=n;b++){printf(" b=%d\n",b);int falg=1;for(int k=i;k<b+i;k++){for(int l=j;l<j+b;l++){if(matrix[k][l]!='1'){falg=0;break;}}}if(falg==1){if(max<b){max=b;}}if(falg==0){break;}}}}}return max*max;
}

动态规划:

int maximalSquare(char** matrix, int matrixSize, int* matrixColSize){int max=0,dp[301][301]={0};int m=matrixSize,n=matrixColSize[0];for(int i=0;i<m;i++){for(int j=0;j<n;j++){if(matrix[i][j]=='1'){   dp[i+1][j+1]=fmin(fmin(dp[i][j],dp[i][j+1]),fmin(dp[i][j],dp[i+1][j]))+1;}if(dp[i+1][j+1]>max){max=dp[i+1][j+1];}}}return max*max;
}

279. 完全平方数

中等

1.6K

相关企业

给你一个整数 n ,返回 和为 n 的完全平方数的最少数量 。

完全平方数 是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,149 和 16 都是完全平方数,而 3 和 11 不是。

示例 1:

输入:n = 12
输出:3 
解释:12 = 4 + 4 + 4

示例 2:

输入:n = 13
输出:2
解释:13 = 4 + 9

提示:

  • 1 <= n <= 104
int numSquares(int n) 
{int dp[n +1];   //定义dp的大小dp[0] = 0;      //定义dp的初始状态int min; for(int i = 1 ; i <= n ; i++){min = INT_MAX;for(int j = 1 ; j*j <= i;j++){min = fmin(min, dp[i - j * j]);}dp[i] = min + 1;}return dp[n];
}

300. 最长递增子序列

中等

3K

相关企业

给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。

子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。

示例 1:

输入:nums = [10,9,2,5,3,7,101,18]
输出:4
解释:最长递增子序列是 [2,3,7,101],因此长度为 4 。

示例 2:

输入:nums = [0,1,0,3,2,3]
输出:4

示例 3:

输入:nums = [7,7,7,7,7,7,7]
输出:1

提示:

  • 1 <= nums.length <= 2500
  • -104 <= nums[i] <= 104

进阶:

  • 你能将算法的时间复杂度降低到 O(n log(n)) 吗?
int lengthOfLIS(int* nums, int numsSize){int dp[numsSize],max=0;for(int i=0;i<numsSize;i++){dp[i]=1;for(int j=0;j<i;j++){if(nums[i]>nums[j]){dp[i]=fmax(dp[i],dp[j]+1);}}if(dp[i]>max){max=dp[i];}}return max;
}

376. 摆动序列

中等

857

相关企业

如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为 摆动序列 。第一个差(如果存在的话)可能是正数或负数。仅有一个元素或者含两个不等元素的序列也视作摆动序列。

  • 例如, [1, 7, 4, 9, 2, 5] 是一个 摆动序列 ,因为差值 (6, -3, 5, -7, 3) 是正负交替出现的。

  • 相反,[1, 4, 7, 2, 5] 和 [1, 7, 4, 5, 5] 不是摆动序列,第一个序列是因为它的前两个差值都是正数,第二个序列是因为它的最后一个差值为零。

子序列 可以通过从原始序列中删除一些(也可以不删除)元素来获得,剩下的元素保持其原始顺序。

给你一个整数数组 nums ,返回 nums 中作为 摆动序列 的 最长子序列的长度 。

示例 1:

输入:nums = [1,7,4,9,2,5]
输出:6
解释:整个序列均为摆动序列,各元素之间的差值为 (6, -3, 5, -7, 3) 。

示例 2:

输入:nums = [1,17,5,10,13,15,10,5,16,8]
输出:7
解释:这个序列包含几个长度为 7 摆动序列。
其中一个是 [1, 17, 10, 13, 10, 16, 8] ,各元素之间的差值为 (16, -7, 3, -3, 6, -8) 。

示例 3:

输入:nums = [1,2,3,4,5,6,7,8,9]
输出:2

提示:

  • 1 <= nums.length <= 1000
  • 0 <= nums[i] <= 1000
int wiggleMaxLength(int* nums, int numsSize) {int up[numsSize];memset(up,0,sizeof(int)*numsSize);up[0]=1;int down[numsSize];memset(down,0,sizeof(int)*numsSize);down[0]=1;int max=0;for(int i=0;i<numsSize;i++){for(int j=0;j<i;j++){if(nums[i]>nums[j]){down[i]=fmax(up[j]+1,down[i]);}if(nums[i]<nums[j]){up[i]=fmax(down[j]+1,up[i]);}}if(up[i]>max){max=up[i];}if(down[i]>max){max=down[i];}}return max;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/381349.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Gridview应用技巧——如何为行添加事件

Gridview应用技巧——如何为行添加事件收藏 下面的代码实现了如何为Gridview添加鼠标经过、离开、单击、双击的事件 protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) { e.Row.Attributes.Add("BorderColor ", &…

python 画折线图_Python让你的数据生成可视化图形

ID&#xff1a;pk哥公众号&#xff1a;Python知识圈最近的技术分享被老板说了&#xff0c;分享内容不错&#xff0c;可是这些统计图差了点。作为一个做技术的&#xff0c;这是不能忍受的。因为 Python 除了不会生孩子&#xff0c;其他的都会。直接进入今天的正题&#xff0c;Ec…

selenium rc java_selenium笔记一--selenium RC+JAVA环境搭建

3.选择options—format&#xff0c;选择java /Junit4/remote control ,选择工作区中的source标签&#xff0c;即显示java脚本51Testing软件测试网5^,_{8Ke5o$~h.F#HY2H,H.lS,u(e0脚本如下&#xff0c;只需修改一下红色部分&#xff0c;即可在Eclipse里运行"w;\J6U9g,D[0pa…

如何清理不必要的事件日志分类

在我们的计算机上面&#xff0c;经常安装一些重要的软件的话&#xff0c;可能会在事件查看器中遗留一些东西。有些软件会创建自己的事件日志类型&#xff08;或者称为分类更合适&#xff09;&#xff0c;但可能在删除的时候忘记清理。如下面所示 那么如何才能清理掉他们呢&…

es6 数组合并_13个不low的JS数组操作,你需要知道一下

作者 | 火狼1来源 | https://juejin.im/post/5c92e385e51d450ce11df1d1前言本文主要从应用来讲数组api的一些骚操作&#xff1b;如一行代码扁平化n维数组、数组去重、求数组最大值、数组求和、排序、对象和数组的转化等&#xff1b;这些应用场景你可以用一行代码实现吗&#xf…

java控制cmd导出dmp文件_cmd的操作命令导出导入.dmp文件

1:G:\Oracle\product\10.1.0\Client_1\NETWORK\ADMIN目录下有个tnsname.ora文件&#xff0c;内容如下&#xff1a;hz_rmdb (DESCRIPTION (ADDRESS (PROTOCOL TCP)(HOST 19.109.113.36)(PORT 1521))(CONNECT_DATA (SERVER DEDICATED)(SERVICE_NAME rmdb)))其中&#xff1a…

web developer tips (1):创建、管理、应用样式表的强大工具

原文链接&#xff1a;Powerful CSS Tools to Create, Manage and Apply Styles Visual Studio 2008 包含了三个新的CSS样式工具窗口&#xff1a; 1、应用样式&#xff08;Apply Styles &#xff09; 2、管理样式&#xff08;Manage Styles&#xff09; 3、CSS属性&#xff08;C…

excel去重怎么操作_excel数据技巧:不用公式如何快速去重

编按&#xff1a;哈喽&#xff0c;大家好&#xff01;在我们平时处理数据的时候&#xff0c;经常会发现一些重复的数据&#xff0c;这不仅会降低我们的工作效率&#xff0c;还会影响我们后续对数据的分析。今天就为大家分享4种不借助公式就能在excel中删除重复值的方法&#xf…

java制作h5视频聊天_JAVA实现大华摄像头WEB方式实时显示视频,H5界面展示方式思路。...

JAVA实现大华摄像头WEB方式实时显示视频,H5界面展示方式思路。2018-09-17问题:大华IPC枪型摄像头需要在WEB中显示实时监控视频,官方提供的SDK只有C#的桌面程序访问方式。解决思路:RTSP协议访问方式将RTSP流转换成hls文件在H5的video播放器中进行播放实时视频。一、首先将摄像头…

python用电度数设计_无所不能的Python之配电设计自动化系统

诚如题目所言&#xff0c;本人结合Python程序设计与配电设计的互补性打算开发一个配电设计自动化系统&#xff0c;用来提高配电设计的工作效率。本人目前处在配电设计行业&#xff0c;已深耕多年&#xff0c;期间一直有学习Python&#xff0c;后来发现Python的很多库都能解决配…

Google Maps地图投影全解析

原文出处&#xff1a;http://www.cnblogs.com/LionGG/archive/2009/04/20/1439905.html Google Maps、Virtual Earth等网络地理所使用的地图投影&#xff0c;常被称作Web Mercator或Spherical Mercator&#xff0c;它与常规墨卡托投影的主要区别就是把地球模拟为球体而非椭球体…

java内存模型 创建类_JVM内存模型及String对象内存分配

昨天看了一篇关于《Java后端程序员1年工作经验总结》的文章&#xff0c;其中有一段关于String和StringBuffer的描述&#xff0c;对于执行结果仍然把握不准&#xff0c;趁此机会也总结了下JVM内存模型。1、JVM运行时数据区域关于JVM内存模型之前也了解过一些&#xff0c;也是看过…

微信小程序数据拼接_微信小程序 数据预拉取

数据预拉取预拉取能够在小程序冷启动的时候通过微信后台提前向第三方服务器拉取业务数据&#xff0c;当代码包加载完时可以更快地渲染页面&#xff0c;减少用户等待时间&#xff0c;从而提升小程序的打开速度 。使用流程1. 配置数据下载地址登录小程序 MP 管理后台&#xff0c;…

给ULWOW 写的广告效果(缓动切换)

应 幽狼魔兽 站长所托&#xff0c;写了一个 广告切换效果&#xff08;点击查看DEMO&#xff09; 形式是常见的形式&#xff0c;但是在功能上有一定的拓展。 主要功能&#xff1a; 1&#xff0c;自动检测广告图片个数 生产广告序列 2&#xff0c;缓动切换&#xff0c;仿原版FLA…

java ecdh秘钥交换_DH密钥交换和ECDH原理(转)

下面我们以Alice和Bob为例叙述Diffie-Hellman密钥交换的原理。1,Diffie-Hellman交换过程中涉及到的所有参与者定义一个组&#xff0c;在这个组中定义一个大质数p&#xff0c;底数g。2,Diffie-Hellman密钥交换是一个两部分的过程&#xff0c;Alice和Bob都需要一个私有的数字a&am…

生活GOOGLE,GOOGLE生活

从上网起就知道GOOGLE的了&#xff0c;不过那个时候傻乎乎的就知道新浪和搜狐&#xff0c;随着网龄的慢慢增长对互联网也慢慢的了解的了&#xff0c;就发现其实生活中慢慢的离不开很多的东西&#xff0c;电脑天天在用&#xff0c;可是今天让我感触最深的是GOOGLE无处不在&#…

python爬虫源代码_零基础自学爬虫(5)B站有哪些爬虫的视频学习资源-附Python源代码...

前几天看到有人提问&#xff1a;。b站哪个python爬虫视频讲的较好&#xff1f;谢谢各位能解答一下。&#xff1f; 于是顺手写了一个小爬虫&#xff0c;把数据爬了下来。 今天有空放一下源代码。数据源&#xff0c;是在B站搜索框直接搜索“爬虫”&#xff0c;并选择按收藏排序。…

tcl手机 手写java_TCL魔法手指V2.0 (使笔记本Synaptics触摸板变身为手写板)

TCL魔法手指功能概述识别率最高&#xff1a;最新的识别核心&#xff0c;识别率达到99.3&#xff05;&#xff0c;并配合目前最好的多字切分技术&#xff0c;可流畅的连笔书写&#xff0c;随意的倒插笔书写&#xff0c;完全尊重您的书写习惯。无需特殊硬件&#xff1a;只要您的笔…

用VBA去除Excel工作表保护密码

今天帮同事解决个EXCEL问题&#xff0c;现记在这&#xff0c;以作备忘 现象&#xff1a; 想要修改保护单元 格的内容&#xff0c;在使用“工具”菜单“保护”子菜单的“撤消工作表保护”命令&#xff0c;这时要求输入密码。 解决方案&#xff1a;网上找到一文http://www.excel1…

python连接数据库mysql错误1045_django 连接数据库出现1045错误的解决方式

根据菜鸟教程Django教程学习&#xff0c;运行"python manage.py migrate" 报错&#xff0c;出现django.db.utils.OperationalError: (1045, “Access denied for user ‘账号localhost (using password: YES)”)错误。这种错误指的是连接数据库时账号密码错误。1.只需…