剑指 Offer 第9天 第10天
创始人
2024-05-20 00:49:38
0

 

目录

剑指 Offer 42. 连续子数组的最大和

 剑指 Offer 47. 礼物的最大价值

剑指 Offer 46. 把数字翻译成字符串

剑指 Offer 48. 最长不含重复字符的子字符串


剑指 Offer 42. 连续子数组的最大和

输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。

要求时间复杂度为O(n)。

示例1:

输入: nums = [-2,1,-3,4,-1,2,1,-5,4]
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/lian-xu-zi-shu-zu-de-zui-da-he-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

【解法一】状态转移方程就是F(i) = max(nums[i], F[i-1]+nums[i]);

不过可以利用滚动数组思想进行优化

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

【解法二】进行优化

class Solution {
public:int maxSubArray(vector& nums) {int pre = 0, res = nums[0];for(auto& e : nums){pre = max(e, pre+e);res = max(pre, res);}return res;}
};

 剑指 Offer 47. 礼物的最大价值

在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物?

示例 1:

输入:
[
  [1,3,1],
  [1,5,1],
  [4,2,1]
]
输出: 12
解释: 路径 1→3→5→2→1 可以拿到最多价值的礼物

【解法一】

class Solution {
public:int maxValue(vector>& grid) {for(int i = 1; i < grid.size(); i++)grid[i][0] += grid[i-1][0];for(int j = 1; j < grid[0].size(); j++)grid[0][j] += grid[0][j-1];for(int i = 1; i < grid.size(); i++){for(int j = 1; j < grid[0].size(); j++){grid[i][j] += max(grid[i-1][j], grid[i][j-1]);}}return grid[grid.size()-1][grid[0].size()-1];}
};

剑指 Offer 46. 把数字翻译成字符串

给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。

示例 1:

输入: 12258
输出: 5
解释: 12258有5种不同的翻译,分别是"bccfi", "bwfi", "bczi", "mcfi"和"mzi"

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/ba-shu-zi-fan-yi-cheng-zi-fu-chuan-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

【解法一】动态规划,满足在0~25范围可以在dp[i-2]的基础上组成一个字符,如果不在范围,就只能单独成为一个字符,也就是dp[i-1]的值,初始化dp全为1,并且给最前方预留一个位置。

 

class Solution {
public:int translateNum(int num) {string nums(to_string(num));vector dp(nums.size()+1, 1);for(int i = 1; i < nums.size(); i++){if((nums[i-1]=='1'&&nums[i]>='0'&&nums[i]<='9') ||nums[i-1]=='2'&&nums[i]>='0'&&nums[i]<='5')dp[i+1] = dp[i]+dp[i-1];else dp[i+1] = dp[i];}return dp[nums.size()];}
};

【解法二】滚动数组思想进行优化

class Solution {
public:int translateNum(int num) {string nums(to_string(num));int dp1 = 1, dp2 = 1, res = 1;for(int i = 1; i < nums.size(); i++){if((nums[i-1]=='1'&&nums[i]>='0'&&nums[i]<='9') ||nums[i-1]=='2'&&nums[i]>='0'&&nums[i]<='5')res = dp1+dp2;else res = dp2;dp1 = dp2;dp2 = res;}return res;}
};

剑指 Offer 48. 最长不含重复字符的子字符串

请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。

示例 1:

输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。

【解法一】转移方程为F(i) = max(i-j+1, F(i)) 在j-i为不重复字符串情况下  暴力!!!

具体做法:截取j到i的字符串,然后检测这个字符串看其是否重复。时间复杂度N^3

class Solution {
public:bool isrepeat(string s){map mp;for(auto e : s){if(mp[e]==1)return false;elsemp[e]++;}return true;}int lengthOfLongestSubstring(string s) {if(s.empty())return 0;vector dp(s.size());int res = 1;for(int i = 1; i < s.size(); i++){for(int j = 0; j < i; j++){int len = i-j+1;string temp = s.substr(j, len);if(isrepeat(temp)){dp[i] = max(len, dp[i]);res = max(dp[i], res);}}}return res;}
};

【解法二】

class Solution {
public:int lengthOfLongestSubstring(string s) {vector dp(128,-1);//存储每个字符最后出现的位置int i=0,j=0,res=0;for(;j

相关内容

热门资讯

安卓子系统windows11,... 你知道吗?最近科技圈可是炸开了锅,因为安卓子系统在Windows 11上的兼容性成了大家热议的话题。...
电脑里怎么下载安卓系统,电脑端... 你有没有想过,你的电脑里也能装上安卓系统呢?没错,就是那个让你手机不离手的安卓!今天,就让我来带你一...
索尼相机魔改安卓系统,魔改系统... 你知道吗?最近在摄影圈里掀起了一股热潮,那就是索尼相机魔改安卓系统。这可不是一般的改装,而是让这些专...
安卓系统哪家的最流畅,安卓系统... 你有没有想过,为什么你的手机有时候像蜗牛一样慢吞吞的,而别人的手机却能像风一样快?这背后,其实就是安...
安卓最新系统4.42,深度解析... 你有没有发现,你的安卓手机最近是不是有点儿不一样了?没错,就是那个一直在默默更新的安卓最新系统4.4...
android和安卓什么系统最... 你有没有想过,你的安卓手机到底是用的是什么系统呢?是不是有时候觉得手机卡顿,运行缓慢,其实跟这个系统...
平板装安卓xp系统好,探索复古... 你有没有想过,把安卓系统装到平板上,再配上XP系统,这会是怎样一番景象呢?想象一边享受着安卓的便捷,...
投影仪装安卓系统,开启智能投影... 你有没有想过,家里的老式投影仪也能焕发第二春呢?没错,就是那个曾经陪你熬夜看电影的“老伙计”,现在它...
安卓系统无线车载carplay... 你有没有想过,开车的时候也能享受到苹果设备的便利呢?没错,就是那个让你在日常生活中离不开的iOS系统...
谷歌安卓8系统包,系统包解析与... 你有没有发现,手机更新换代的速度简直就像坐上了火箭呢?这不,最近谷歌又发布了安卓8系统包,听说这个新...
微软平板下软件安卓系统,开启全... 你有没有想过,在微软平板上也能畅享安卓系统的乐趣呢?没错,这就是今天我要跟你分享的神奇故事。想象你手...
coloros是基于安卓系统吗... 你有没有想过,手机里的那个色彩斑斓的界面,背后其实有着一个有趣的故事呢?没错,我要说的就是Color...
安卓神盾系统应用市场,一站式智... 你有没有发现,手机里的安卓神盾系统应用市场最近可是火得一塌糊涂啊!这不,我就来给你好好扒一扒,看看这...
黑莓平板安卓系统升级,解锁无限... 亲爱的读者们,你是否还记得那个曾经风靡一时的黑莓手机?那个标志性的全键盘,那个独特的黑莓体验,如今它...
安卓文件系统采用华为,探索高效... 你知道吗?最近安卓系统在文件管理上可是有了大动作呢!华为这个科技巨头,竟然悄悄地给安卓文件系统来了个...
深度系统能用安卓app,探索智... 你知道吗?现在科技的发展真是让人惊叹不已!今天,我要给你揭秘一个超级酷炫的话题——深度系统能用安卓a...
安卓系统的分区类型,深度解析存... 你有没有发现,你的安卓手机里藏着不少秘密?没错,就是那些神秘的分区类型。今天,就让我带你一探究竟,揭...
安卓系统铠无法兑换,揭秘无法兑... 最近是不是有很多小伙伴在玩安卓系统的游戏,突然发现了一个让人头疼的问题——铠无法兑换!别急,今天就来...
汽车安卓系统崩溃怎么刷,一键刷... 亲爱的车主朋友们,你是否曾遇到过汽车安卓系统崩溃的尴尬时刻?手机系统崩溃还能重启,但汽车系统崩溃了,...
miui系统可以刷安卓p系统吗... 亲爱的手机控们,你是否对MIUI系统情有独钟,同时又对安卓P系统的新鲜功能垂涎欲滴?今天,就让我带你...