【C++ 算法进阶】算法提升十七

news/2024/11/18 14:39:33/

目录

  • 寻找二维数组中是否存在某个数
    • 题目
    • 题目分析
  • 寻找二维数组中第K小的数
    • 题目
    • 题目分析
    • 代码
  • 字符串s子序列组成t (动态规划)
    • 题目
    • 题目分析
  • 不同的子序列 (观察)
    • 题目
    • 题目分析
    • 代码

寻找二维数组中是否存在某个数

题目

给定你一个二维数组 数组的每一行都有序 每一列也都有序

现在给你一个数 请问该二维数组中是否存在这个数

题目分析

因为这个二维数组每一行 每一列都是有序的 所以说我们可以从右上角开始查询这个数组中是否存在一个元素

假设右上角的数大于我们要找的数则说明这列不可能存在 我们左边去找

假设右上角的数小于我们要找的数则说明这一行不可能存在 我们往下面去找

依次往复 最后如果到越界都没有找到不存在

寻找二维数组中第K小的数

题目

给定你一个二维数组 数组的每一行都有序 每一列也都有序

现在要求这个数组中第K小的数

题目分析

假设我们现在给定一个数字K 根据题目一的思路 从右上角开始找我们很轻松就能找到有多少个数小于K 并且能找到小于等于K且最接近K的数字是什么

如果说我们能找出小于等于M 并且距离M最接近的数字是多少 那么我们通过不断的二分 就可以找到数组中第K小的数

代码

class Solution {
public:bool check(vector<vector<int>>& matrix, int mid, int k, int n) {int i = n - 1;int j = 0;int num = 0;while (i >= 0 && j < n) {if (matrix[i][j] <= mid) {num += i + 1;j++;} else {i--;}}return num >= k;}int kthSmallest(vector<vector<int>>& matrix, int k) {int n = matrix.size();int left = matrix[0][0];int right = matrix[n - 1][n - 1];while (left < right) {int mid = left + ((right - left) >> 1);if (check(matrix, mid, k, n)) {right = mid;} else {left = mid + 1;}}return left;}
};

字符串s子序列组成t (动态规划)

题目

给定一个字符串s和字符串t

现在请问字符串s的子序列有多少中可能性能组成字符串t

题目分析

涉及到两个字符串的问题我们就要想到样本对应模型的动态规划

我们假设一个普遍位置的 dp[i][j] i表示字符串s0~i位置 j表示字符串t的0到j位置

dp[i][j]的值则表示有多少中方法

一般样本对应模型都要从末尾位置来分析

我们假设末尾位置不参与

则实际上我们要求的就是dp[I-1][J]

我们假设末尾位置参与 这种可能性要求末尾位置的值和t位置末尾位置的值一样

此时我们要求的是dp[I-1][J-1]


最后将两个可能性相加即可

不同的子序列 (观察)

题目

本题为LC原题

在这里插入图片描述

题目分析

假设没有重复的字符的话 我们每次添加新字符时就相当于将原来的所有集合再乘以2 就能得到新加字符后的总集合

可以如果有重复集合的话 则我们需要减去上次重现该字符时新家的字符个数 就是下面代码中出现的newall

代码

class Solution {
public:int distinctSubseqII(string s) {int mod = 1000000007;unordered_map<char , int> mapCount;int all = 1;for (int i = 0; i < s.size(); i++) {int lnNewAll = all;int lnCurAll = all;lnCurAll = (lnCurAll + lnNewAll) % mod;lnCurAll = ( lnCurAll + mod - (mapCount.count(s[i]) == 1 ?  mapCount[s[i]] : 0) ) % mod;all = lnCurAll;mapCount[s[i]] = lnNewAll;}return (all + mod - 1) % mod;}
};

http://www.ppmy.cn/news/1548007.html

相关文章

单元测试、集成测试、系统测试、验收测试、压力测试、性能测试、安全性测试、兼容性测试、回归测试(超详细的分类介绍及教学)

目录 1.单元测试 实现单元测试的方法&#xff1a; 注意事项&#xff1a; 2.集成测试 需注意事项&#xff1a; 实现集成测试的方法&#xff1a; 如何实现高效且可靠的集成测试&#xff1a; 3.系统测试 实现系统测试的方法: 须知注意事项&#xff1a; 4.验收测试 实现验…

Django5 2024全栈开发指南(二):Django项目配置详解

目录 一、基本配置信息二、资源文件配置2.1 资源路由——STATIC_URL2.2 资源集合——STATICFILES_DIRS2.3 资源部署——STATIC_ROOT2.2.4 媒体资源——MEDIA 三、模板配置四、数据库配置4.1 mysqlclient连接MySQL4.2 pymysql连接MySQL4.3 多个数据库的连接方式4.4 使用配置文件…

(动画版)排序算法 -希尔排序

文章目录 1. 希尔排序&#xff08;Shellsort&#xff09;1.1 简介1.2 希尔排序的步骤1.3 希尔排序的C实现1.4 时间复杂度1.5 空间复杂度1.6 希尔排序动画 1. 希尔排序&#xff08;Shellsort&#xff09; 1.1 简介 希尔排序&#xff08;Shells Sort&#xff09;&#xff0c;又…

Python虚拟环境入门:虚拟环境如何工作、如何自定义创建和管理管理工具venv、Virtualenv、conda

文章目录 一、虚拟环境介绍1.1 为什么需要虚拟环境1.2 什么是虚拟环境1.2.1 venv常用命令1.2.2 虚拟环境的文件夹结构1.2.3 虚拟环境的隔离性 二、虚拟环境是如何工作的2.1 复制结构和文件2.2 调整前缀查找过程2.2.1 系统前缀查找过程2.2.2 虚拟环境前缀查找过程 2.3 链接回标准…

pytest | 框架的简单使用

这里写目录标题 单个文件测试方法执行测试套件的子集测试名称的子字符串根据应用的标记进行选择 其他常见的测试命令 pytest框架的使用示例 pytest将运行当前目录及其子目录中test_*.py或 *_test.py 形式的所有 文件 文件内的函数名称可以test* 或者test_* 开头 单个文件测试…

二、神经网络基础与搭建

神经网络基础 前言一、神经网络1.1 基本概念1.2 工作原理 二、激活函数2.1 sigmoid激活函数2.1.1 公式2.1.2 注意事项 2.2 tanh激活函数2.2.1 公式2.2.2 注意事项 2.3 ReLU激活函数2.3.1 公式2.3.2 注意事项 2.4 SoftMax激活函数2.4.1 公式2.4.2 Softmax的性质2.4.3 Softmax的应…

【代码大模型】Compressing Pre-trained Models of Code into 3 MB论文阅读

Compressing Pre-trained Models of Code into 3 MB key word: code PLM, compression, GA算法 论文&#xff1a;https://dl.acm.org/doi/pdf/10.1145/3551349.3556964 代码&#xff1a;https://github.com/soarsmu/Compressor.git 【why】 1.问题描述&#xff1a; code LLM …

3. langgraph中的react agent使用 (在react agent添加系统提示)

环境准备 确保你已经安装了以下库&#xff1a; langchainlangchain_openailanggraph 你可以使用以下命令进行安装&#xff1a; pip install langchain langchain_openai langgraph代码实现 1. 初始化模型 首先&#xff0c;我们需要初始化智谱AI的聊天模型。 from langch…