day12 13-牛客67道剑指offer-JZ83、70、63、47、48、46、21、81

news2024/9/23 3:22:51

1. JZ83 剪绳子(进阶版)

在这里插入图片描述

class Solution {
public:
    int jumpFloorII(int number) {
        if(number <= 1) return number;
        int temp = 1;
        int res = 0;
        /*
        2级台阶 2
        3级台阶 4
        4级台阶 6
        5级台阶 16
        */
        for(int i=2; i<=number; i++)
        {
            res = 2 * temp;
            temp = res;
        }
        return res;
    }
};

2. JZ70 矩形覆盖

在这里插入图片描述
在这里插入图片描述
斐波那契鳄数列的另外一种形式,关注长就好,高永远是2

class Solution {
public:
    int rectCover(int number) {
        if(number <= 2) return number;
        int len1 = 1;
        int len2 = 2;
        int res = 0;
        for(int i=3; i<=number; i++)
        {
            res = len1 + len2;
            len1 = len2;
            len2 = res;
        }
        return res;
    }
};

3. JZ63 买卖股票的最好时机(一)

在这里插入图片描述

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        vector<vector<int>> dp(prices.size(), vector<int>(2,0));
        /*
        dp[i][]-第i天的收益 两种状态 0-不持股 1-持股
        dp[i][0]不持股收益,要么前一天就没有股票,今天也不买股票,收益不变;要么前一天有股票,今天卖出股票,收益加上卖出的钱
        dp[i][1]持股收益,要么前一天持有股票,今天不卖,收益不变;要么前一天没有股票,今天买入股票,收益减去买股票的钱
        */
        dp[0][0] = 0;
        dp[0][1] = -prices[0];
        for(int i=1; i<prices.size(); i++)
        {
            dp[i][0] = max(dp[i-1][0], dp[i-1][1] + prices[i]);
            dp[i][1] = max(dp[i-1][1], -prices[i]);
        }
        //最后一天不持股,到该天为止的最大收益
        return dp[prices.size()-1][0];
    }
};

4. JZ47 礼物的最大价值

在这里插入图片描述
在这里插入图片描述

class Solution {
public:
    int maxValue(vector<vector<int> >& grid) {
        int m = grid.size();        //行数
        int n = grid[0].size();     //列数
        vector<vector<int>> dp(m, vector<int>(n, 0));
        dp[0][0] = grid[0][0];
        //第一列只能来自上方
        for(int i=1; i<m; i++)
            dp[i][0] = dp[i-1][0] + grid[i][0];
        //第一行只能来自左边
        for(int j=1; j<n; j++)
            dp[0][j] = dp[0][j-1] + grid[0][j];
        
        for(int i=1; i<m; i++)
        {
            for(int j=1; j<n; j++)
            {
                dp[i][j] = max(dp[i-1][j], dp[i][j-1]) + grid[i][j];
            }
        }
        return dp[m-1][n-1];
    }
};

使用原来的grid数组

5. JZ48 最长不含重复字符的子字符串

在这里插入图片描述

滑动窗口+哈希

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        //滑动窗口+哈希
        unordered_map<char, int> hashmap;
        int result = 0;
        for(int left=0, right=0; right<s.size(); right++)
        {
            hashmap[s[right]]++;//统计频率
            //出现次数大于1,则窗口内有重复 
            while(hashmap[s[right]] > 1)
            {
                hashmap[s[left]]--;//同时减去该字符的出现次数 把较早出现的字符移出窗口
                left++;//窗口左移
            }
            result = max(result, right - left + 1);
        }
        return result;
    }
};

动态规划

在这里插入图片描述

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        //动态规划
        if(s.size() <= 1) return s.size();
        int result = 0;
        vector<int> dp(s.size(), 0);
        dp[0] = 1;
        for(int j=1; j<s.size(); j++)
        {
            int i = j - 1;
            //i就是距离j最近的相同字符位置
            while( j >= 0 && s[i] != s[j]) i--;
            //if(i<0) dp[j] = dp[j-1]+1;
            if(dp[j-1] < j-i) dp[j] = dp[j-1] + 1;//第i个字符不在dp[j-1]的区间之内
            else dp[j] = j-i;//第i个字符在dp[i-1]的区间之内
            if(dp[j] > result) result = dp[j];
        }
        return result;
    }
};

6. JZ46 把数字翻译成字符串

在这里插入图片描述
三种特殊情况剔除,0、10和20、0的前面不是1和2
动态规划,两种状态,1-9只有一种译码方案;10-19,21-26都有两种译码方案。

class Solution {
public:
    int solve(string nums) {
        //排除0
        if(nums == "0") 
            return 0;
        //排除只有一种可能的10 和 20
        if(nums == "10" || nums == "20") 
            return 1;
        //当0的前面不是1或2时,无法译码,0种
        for(int i = 1; i < nums.size(); i++){ 
            if(nums[i] == '0')
                if(nums[i - 1] != '1' && nums[i - 1] != '2')
                    return 0;
        }
        vector<int> dp(nums.size()+1, 1);
        for(int i=2; i<=nums.size(); i++)
        {
            //在11-19,21-26之间的情况
            if((nums[i-2] == '1' && nums[i-1] != '0') || (nums[i-2] == '2' && nums[i-1] > '0' && nums[i-1] < '7'))
                dp[i] = dp[i-2] + dp[i-1];
            else dp[i] = dp[i-1];//在1-9 之间的情况
        }
        return dp[nums.size()];//size()是包括最后的\0 length()就是字符个数
    }
};

7. JZ21 调整数组顺序使奇数位于偶数前面(一)

在这里插入图片描述
插入排序思想,记录已经是奇数的位置下标(视作为有序区域),然后向后遍历,一经发现是奇数则进行“插入排序”,然后有序区下标加1。

class Solution {
public:
    vector<int> reOrderArray(vector<int>& array) {
        //记录已经是奇数的位置 要插入奇数的位置 i前面的数字都是排好序的
        int oddindex=0;        
        int temp = 0;
        for(int i=0; i<array.size(); i++)
        {
            temp = array[i];
            //i 遇到奇数 先保存这个值,然后将 【i, j-1】数组后移动
            if((array[i] & 1) == 1)
            {
                temp = array[i];
                for(int j=i-1; j>=oddindex; --j)
                    array[j+1] = array[j];
                //再把 遇到的奇数插在 oddindex位置
                array[oddindex++] = temp;
            }
        }
        return array;
    }
};

8. JZ81 调整数组顺序使奇数位于偶数前面(二)

在这里插入图片描述
这个题和(一)的区别就是,数字的顺序可以不固定,所以就是两个指针遍历,奇数位是偶数与偶数位是奇数的两个数字交换就好啦。

class Solution {
public:
    vector<int> reOrderArrayTwo(vector<int>& array) {
        int left = 0;                   //偶数位 要求是奇数
        int right = array.size()-1;     //奇数位 要求是偶数
        while(left < right)
        {
            while(left < right && (array[left] & 1) == 1) left++;//偶数位是奇数 跳过
            while(left < right && (array[right] & 1) == 0) right--;
            swap(array[left], array[right]);
        }
        return array;
    }
};

这种就是偶数放在前面,奇数放在后面

class Solution {
public:
    vector<int> reOrderArrayTwo(vector<int>& array) {
        int left = 0, right = array.size()-1;
        while(left < right)
        {
            while(left < right && (array[left] & 1) != 1) left++;//偶数位是偶数
            while(left < right && (array[right] & 1) != 0) right--;
            swap(array[left], array[right]);
        }
        return array;
    }
};

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

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

相关文章

ts与vue

ts与Vue 如果你已经学习了typeScript,但不知道如何在vue项目中使用&#xff0c;那么这篇文章将会很适合你。参考千峰教育 kerwin视频 1.会自动推导&#xff0c;隐士推导。提示 类型系统。 独立模块。 isolatedModules选项&#xff1a;是否配置为独立的模块。 减少报错 let …

innodb索引与算法

B树主键插入 B树在innodb的插入有三种模式page_last_insert, page_dirction, page_N_direction 而在bustub里面的B树就是page_N_direction,如果是自增主键的话&#xff0c;就是上面这样的插入法 FIC优化 (DDL) 选择性统计 覆盖索引 MMR ICP优化 自适应hash 全文索引

乖宝宠物上市,能否打破外资承包中国宠物口粮的现实

近日&#xff0c;乖宝宠物上市了&#xff0c;这是中国宠物行业成功挂牌的第三家公司。同时&#xff0c;昨日&#xff0c;宠物行业最大的盛事“亚洲宠物展”时隔3年&#xff0c;于昨日在上海成功回归。 这两件事情的叠加可谓是双喜临门&#xff0c;行业能够走到今天实属不易&…

09- DMA(DirectMemoryAccess直接存储器访问)

DMA 09 、DMA(DirectMemoryAccess直接存储器访问)DMA配置流程 09 、DMA(DirectMemoryAccess直接存储器访问) DMA配置流程 dma.c文件 main.c文件 详见《stm32中文参考手册》表57。

c++--SLT六大组件之间的关系

1.SLT六大组件&#xff1a; 容器&#xff0c;迭代器&#xff0c;算法&#xff0c;仿函数&#xff0c;适配器&#xff0c;空间配置器 2.六大组件之间的关系 容器&#xff1a;容器是STL最基础的组件&#xff0c;没有容器&#xff0c;就没有数据&#xff0c;容器的作用就是用来存…

java版本spring cloud 企业工程系统管理 工程项目管理系统源码em

工程项目管理软件&#xff08;工程项目管理系统&#xff09;对建设工程项目管理组织建设、项目策划决策、规划设计、施工建设到竣工交付、总结评估、运维运营&#xff0c;全过程、全方位的对项目进行综合管理 工程项目各模块及其功能点清单 一、系统管理 1、数据字典&#xff…

打印出二进制的奇数位和偶数位

void print(int a) {int i0;printf("奇数位&#xff1a;");for(i30;i>0;i-2){printf("%d ",(a>>i)&1);}printf("\n");printf("偶数位&#xff1a;");for(i31;i>1;i-2){printf("%d ",(a>>i)&1);} …

Prompt、RAG、微调还是重新训练?选择正确的生成式 AI 的方法指南

文章目录 一、前言二、主要内容三、总结 &#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 一、前言 这篇博客试图根据一些常见的可量化指标&#xff0c;为您选择适合您用例的生成式人工智能方法提供指导。 生成式 AI 正在以惊人的速度发展&#xff0c…

PyCharm连接Docker中的容器(ubuntu)

一、为什么要用Pycharm链接Docker中的ubuntu 因为在进行深度学习的时候&#xff0c;基于windows系统在开发的过程中&#xff0c;老是出现很多问题&#xff0c;大多数是环境问题。 尽管安装了Conda&#xff0c;也不能很好的解决问题&#xff0c;使用ubuntu是最好的选择。 二、…

MySql过滤重复数据

假设模型表是: 1. 根据单字段过滤: SELECT user_name, COUNT(*) as count FROM sys_user GROUP BY user_name HAVING count > 1;结果: 2. 根据多个字段查询重复数据 SELECT user_name, email, COUNT(*) as count FROM sys_user GROUP BY user_name, email HAVING count…

Qt平滑弹出页面

目标功能&#xff1a; (1)按下btn&#xff0c;弹出绿色页面。 (2)按下btn2,绿色页面隐藏。 (3)按下左边余下的区域&#xff0c;绿色页面也隐藏。 (4)平滑地显示和隐藏 效果&#xff1a; form.h #ifndef FORM_H #define FORM_H#include <QWidget>namespace Ui { class…

div中的元素水平居中对齐

<div><img src"imgs/xy.jpg" alt""><h2>百变小樱</h2> </div> <style>* {padding: 0;margin: 0;box-sizing: border-box;}div {width: 200px;height: 300px;margin: 20em auto;padding-top: 4em;border: 2px solid rg…

vue启动配置npm run serve,动态环境变量,根据不同环境访问不同域名

首先创建不同环境的配置文件&#xff0c;比如域名和一些常量&#xff0c;创建一个env文件,先看看文件目录 env.dev就是dev环境的域名&#xff0c;.test就是test环境域名&#xff0c;其他同理&#xff0c;然后配置package.json文件 {"name": "require-admin&qu…

桥梁结构健康监测系统,智能预警降低桥梁安全隐患

桥梁通常位于现代综合交通网络中的咽喉部位&#xff0c;对区域经济发展起着重要的推进作用&#xff0c;然而在为社会经济发展做出巨大贡献的同时&#xff0c;它们不可避免地会在荷载作用、环境侵蚀和自然灾害等影响下出现材料腐蚀劣化、结构损伤开裂、性能退化和功能失效等损伤…

销售团队的CRM:不同的销售角色如何使用CRM

客户关系管理&#xff08;CRM&#xff09;是各行各业运营中不可或缺的一部分。确定员工在客户关系管理中的角色是实施过程中的关键要素。 CRM系统为所有与销售相关的工作提供了一个集中平台&#xff0c;使团队能够对数据进行分类&#xff0c;并对活动进行优先排序。CRM 系统的…

CSDN编程题-每日一练(2023-08-17)

CSDN编程题-每日一练&#xff08;2023-08-17&#xff09; 一、题目名称&#xff1a;计算公式二、题目名称&#xff1a;计算逆波兰表达式的结果三、题目名称&#xff1a;争抢糖豆 一、题目名称&#xff1a;计算公式 时间限制&#xff1a;1000ms内存限制&#xff1a;256M 题目描述…

【MySQL--->表的约束】

文章目录 [TOC](文章目录) 一、表的约束概念二、空属性约束三、default约束四、zerofill约束五、主键约束六、auto_increment(自增长)约束七、唯一键约束八、外键约束 一、表的约束概念 表通过约束可以保证插入数据的合法性,本质是通过技术手段,保证插入数据收约束,保证数据的…

项目热部署

本文记录一下热部署步骤。。。。 热部署是提供高开发效率的一个非常有用的工具。指的是在应用程序运行修改代码或资源文件&#xff0c;并将这些变更应用到正在运行的程序上&#xff0c;而无需重新启动应用&#xff0c;无需等待整个项目的重新构建和部署。 使用热部署需要引入依…

leetcode做题笔记85最大矩形

给定一个仅包含 0 和 1 、大小为 rows x cols 的二维二进制矩阵&#xff0c;找出只包含 1 的最大矩形&#xff0c;并返回其面积。 示例 1&#xff1a; 思路一&#xff1a;单调栈 int maximalRectangle(char** matrix, int matrixSize, int* matrixColSize){int dp[matrixSize…

全面揭秘:抖音集团 QUIC 千万 QPS 应用实践

近日&#xff0c;ArchSummit全球架构师峰会深圳站成功举办。随着移动互联网的蓬勃发展&#xff0c;人们对网络速度和实时性的需求日益增加。在面对越来越多的图片、视频和音频等大资源时&#xff0c;页面加载缓慢、视频卡顿等问题频发&#xff0c;传统的传输控制协议&#xff0…