剑指 Offer 第9天 第10天

news2024/9/23 15:23:22

 

目录

剑指 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<int>& nums) {
        vector<int> 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<int>& 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<vector<int>>& 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<int> 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<char,int> mp;
        for(auto e : s)
        {
            if(mp[e]==1)
                return false;
            else
                mp[e]++;
        }
        return true;
    }
    int lengthOfLongestSubstring(string s) {
        if(s.empty())return 0;
        vector<int> 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<int> dp(128,-1);//存储每个字符最后出现的位置
        int i=0,j=0,res=0;
        for(;j<s.size();j++)
        {    
            if(dp[s[j]]<i)//前面的子串不含新加的字符
                res=max(res,j-i+1);
            else//当前字符在之前的子串中出现过            
                i=dp[s[j]]+1;//更新i,使得i到j没有重复字符
            dp[s[j]]=j;//更改当前字符出现的位置                               
        }
        return res;
    }
};

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

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

相关文章

Python self用法详解

在定义类的过程中&#xff0c;无论是显式创建类的构造方法&#xff0c;还是向类中添加实例方法&#xff0c;都要求将 self 参数作为方法的第一个参数。例如&#xff0c;定义一个 Person 类&#xff1a;class Person: def__init__(self): print("正在执行构造方法") #…

大数据项目---电商数仓(三)

目录 1.即席查询_Presto概述 2.即席查询_Presto_Server的部署 3.即席查询_Presto_Server启动 4.即席查询_命令行客户端说明 5.即席查询_LZO说明 6.即席查询_Presto_web端口 ​编辑 7.即席查询_Presto使用注意事项/优化 8.即席查询_Kylin简介 9.即席查询_前置概念 10.即…

数据库系统结构、数据库系统的组成

文章目录一、数据库系统的三级模式结构1.模式&#xff08;逻辑模式&#xff09;2.外模式&#xff08;子模式、用户模式&#xff09;3.内模式&#xff08;存储模式&#xff09;二、数据库的二级映像功能1.外模式/模式映像2.模式/内模式映像3.实际应用三、数据库系统的组成---硬件…

安卓性能优化之内存优化

Java对象生命周期&#xff1a; 创建&#xff1a;为对象分配内存空间&#xff0c;构造对象应用&#xff1a;此时 对象至少被一个强引用持有不可见&#xff1a;未被任何强引用持有&#xff0c;进行可达性分析不可达&#xff1a;可达性分析为不可达&#xff0c;进入下一阶段收集&…

notes

等差&#xff1a;&#xff0c;求 解&#xff1a;、 &#xff0c;则 解&#xff1a; x系数y系数1412 由 得分母 &#xff1b;则分子为&#xff0c; 解&#xff1a;令 已知两边及夹角&#xff0c;可图解 解析几何条件转化 1.平行四边形条件的转化几何性质代数实现(1)对边平行斜…

【IoT】创业:如何找到可以主导的创业市场?

如果你想开始创业&#xff0c;开启一段不一样的旅程&#xff0c;那么你首先要做的就是选赛道&#xff01; 如何选择你的赛道、你的第一个市场呢&#xff1f; 换句话说就是&#xff0c;你如何选择自己的利基市场。 最大的市场&#xff0c;同时&#xff0c;它的需求范围也最广…

全国地级市1999—2020年污染物排放和环境治理相关指标(废水\废气\粉尘等)

工业废水、工业粉尘等污染物是影响居住环境的重要因素&#xff0c;也是在各项研究中常用的数据&#xff01;之前我们基于历年的《中国城市统计年鉴》整理了1999—2020年的人口相关数据和用地相关数据&#xff08;可查看之前推送的文章&#xff09;。在《中国城市统计年鉴》中也…

欧拉回路(模板+外加一些优化)

给定一张图&#xff0c;请你找出欧拉回路&#xff0c;即在图中找一个环使得每条边都在环上出现恰好一次。 输入格式 第一行包含一个整数t, t∈ {1,2}&#xff0c;如果t 1&#xff0c;表示所给图为无向图&#xff0c;如果t2&#xff0c;表示所给图为有向图。 第二行包含两个整数…

【MySQL】日志

https://www.cnblogs.com/myseries/p/10728533.html 在 MySQL 中&#xff0c;有多种不同的日志&#xff0c;包括错误日志、二进制日志、查询日志和慢查询日志&#xff0c;这些日志发挥着不同的作用。另外还有redo日志、undo日志和relay日志。 错误日志 错误日志是 MySQL 中最…

测试篇(四):测试用例的分类、按测试对象划分、按是否查看代码划分、你平时哪种测试方法用的多?、按照开发阶段划分

目录一、按测试对象划分1.1 界面测试1.2 可靠性测试1.3 容测性测试1.4 文档测试1.5 兼容性测试1.6 易用性测试1.7 安装卸载测试1.8 安全测试1.9 性能测试1.10 内存泄露测试1.11 弱网测试二、按是否查看代码划分2.1 黑盒测试2.2 白盒测试2.4 灰盒测试三、面试题&#xff1a;你平…

AcWing 327. 玉米田(状态压缩DP)

AcWing 327. 玉米田&#xff08;状态压缩DP&#xff09;一、问题二、分析1、思路2、状态表示3、状态转移4、循环设计5、初末状态三、代码一、问题 二、分析 1、思路 这道题与之前所讲解的AcWing 1064. 小国王&#xff08;状态压缩DP&#xff09;非常相似&#xff0c;所以如果…

ARM uboot 的源码目录分析

一、uboot的源码目录分析1 1、九鼎官方 uboot 和三星原版 uboot 对比 (1) 以九鼎官方的 uboot 为蓝本来学习的&#xff0c;以三星官方的这份为对照。 (2) 不同版本的 uboot 或者同一版本不同人移植的 uboot&#xff0c;可能目录结构和文件内容都有所不同。将来大家懂了后也可…

剑指 Offer 第8天

目录 剑指 Offer 10- I. 斐波那契数列 剑指 Offer 10- II. 青蛙跳台阶问题 剑指 Offer 63. 股票的最大利润 剑指 Offer 10- I. 斐波那契数列 写一个函数&#xff0c;输入 n &#xff0c;求斐波那契&#xff08;Fibonacci&#xff09;数列的第 n 项&#xff08;即 F(N)&#xf…

java并发编程面试题目及答案2(持续更新)

22、利用原子类手写 CAS 无锁 /** * 利用 cas 手写 锁 */ public class AtomicTryLock {private AtomicLong atomicLongnew AtomicLong(0);private Thread lockCurrentThread; /** * 1 表示锁已经被获取 0 表示锁没有获取 利用 cas 将 0 改为 1 成功则表示获取锁 * return */…

Linux find 命令

Linux find 命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时&#xff0c;不设置任何参数&#xff0c;则 find 命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。语法find path -option [ -pr…

微服务-高并发-思路

一、为什么选择Go语言 Go 语言相对其它语言具有几点天然的优势&#xff1a; 语法简单&#xff0c;上手快性能高&#xff0c;编译快&#xff0c;开发效率也不低原生支持并发&#xff0c;协程模型是非常优秀的服务端模型&#xff0c;同时也适合网络调用部署方便&#xff0c;编译…

C语言深度解剖-关键字(3)

目录 1.关键字 sizeof C语言基本数据类型 认识 sizeof sizeof 相关扩展&#xff1a; 2. signed 与 unsigned 关键字 整形在内存的存储 如何快速转换二进制 写在最后&#xff1a; 1.关键字 sizeof C语言基本数据类型 以下是C语言基本的数据类型&#xff1a; 定义变量的…

Leetcode:37. 解数独(C++)

目录 问题描述&#xff1a; 实现代码与解析&#xff1a; 回溯&#xff1a; 原理思路&#xff1a; 问题描述&#xff1a; 编写一个程序&#xff0c;通过填充空格来解决数独问题。 数独的解法需 遵循如下规则&#xff1a; 数字 1-9 在每一行只能出现一次。数字 1-9 在每一列…

分布式链路追踪SkyWalking进阶实战之RPC上报和WebHook通知(三)

目录 1.自定义SkyWalking链路追踪配置 1.1 什么是TraceId 1.2 使用的背景 1.3 编码 2.SkyWalking-RocketBot性能剖析 3.SkyWalking链路追踪-日志和RPC上报实战 4.源码部署 Apache SkyWalking 5.SkyWalking链路追踪-告警模块和WebHook通知《上》 6.SkyWalking链路追踪-…

对技术类的管理和绩效的一些想法

大家好&#xff1a; 我是烤鸭。看完春晚小品的心情(除了神马组合)&#xff0c;就跟下面这哥们一样&#xff0c;尬的抠脚。再加上初一跟家人出去一趟&#xff0c;消费是真的复苏了&#xff0c;哪哪都排队。本来还想去洗温泉&#xff0c;给商家打电话一直占线…就能想象有多少人了…