动态规划算法练习题

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,一经查实,立即删除!

相关文章

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

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

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

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

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

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

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…

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…

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

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

MVC学习笔记1 MVC概述

MVC概述MVC三种角色– Model&#xff1a; 用于存储数据的组件&#xff08;与领域模型概念不同&#xff09;。– View&#xff1a; 根据Model数据进行内容展示的组件– Controller&#xff1a;接受并处理用户指令&#xff08;操作Model&#xff09;&#xff0c;选择一个Vie…

设计一个医院

源于个人网站&#xff1a;http://programmer.2008red.com/programmer/article_647_777_1.shtml 收到一封来自Exoweb的邮件&#xff0c;让去面试&#xff08;败的很惨&#xff0c;呵呵。过了好长时间了&#xff0c;都忘记这事了&#xff0c;结果这公司来了邮件&#xff0c;说不能…

powerbi的功能介绍_Power BI:1分钟快速生成可视化报表

1.什么是Power BI &#xff1f;Power BI 是微软推出的可视化工具&#xff0c;先来看看微软官方是怎么介绍的&#xff1a;使用用于自助服务和企业商业智能 (BI) 的统一、可扩展平台&#xff08;该平台易于使用&#xff0c;可帮助获取更深入的数据见解&#xff09;&#xff0c;连…

易语言 java支持_开源Java客户端可以连接易语言服务器

我们的服务端处理客户端的连接请求是同步进行的&#xff0c; 每次接收到来自客户端的连接请求后&#xff0c;都要先跟当前的客户端通信完之后才能再处理下一个连接请求。 这在并发比较多的情况下会严重影响程序的性能&#xff0c;为此&#xff0c;我们可以把它改为如下这种异步…

Javascript--File对象

描述: 提供对文件属性的访问.属性: 属性描述Attributes设置或返回文件或文件夹的属性DateCreated返回指定文件或文件夹的创建时间DateLastAccessed返回最近访问文件或文件夹的创建时间DateLastModified返回最后修改指定文件和文件夹的日期和日期Drive返回指定文件或文件夹所在的…

idea怎么调试jsp页面_解决idea的c标签错误

Hello,World.土土来啦&#xff01;最近做jq项目&#xff0c;遇到各种各样的问题。首先就是c标签的错误。对&#xff0c;没错&#xff0c;就是这一串因为土土上学期学的是jsp,所以是在myeclipse做的&#xff0c;这学期就想在idea做后端。然后复制粘贴之前的项目的时候&#xff0…

[SlickEdit] SlickEdit支持目录别名FTP控件更新

有阵没写代码了&#xff0c;SlickEdit升级到2009还没怎么用过&#xff0c;Option面板改动得更像Eclipse了&#xff0c;反正IDE工具也不知道到底谁抄袭谁&#xff0c;只是Symbol Coloring设置太唬人了吧&#xff0c;&#xff0c;默认的symbol coloring总是出现字符偏移&#xff…

有一台服务器远程失败其他电脑可以_使用闲置电视盒子打造家庭网盘和远程下载器和小型服务器(二)...

使用闲置电视盒子打造家庭网盘和远程下载器系列(二)本系列分为五章一、综述二、电视盒子的root三、app的安装和服务器环境的搭建四、网盘系统的部署和使用五、远程下载系统搭建和实现昨天写了第一章&#xff0c;我这是首次写东西&#xff0c;没想到能得到这么多朋友关注&#x…

基于C#.NET的--Windows进程管理工具

基于.NET(C#)编写。 实现了进程的树状显示父子关系&#xff0c;其中应用到了WMI编程&#xff0c;以及P-invoke. 下载地址&#xff1a; 点击右键另存为 地址如上&#xff0c;需要安装.NET环境&#xff0c;地址:http://www.microsoft.com/downloads/details.aspx?displaylangzh-…