当前位置: 首页 > news >正文

额外题目第4天|132 673 841 127 684 657

132 我发现困难题往往是在中等题的基础上再多了一步 分割最少次数的回文子串 这道题就是在之前动态规划法找回文子串 (leetcode第5题) 的基础上更多

这题还是用动规来写 思路参考代码随想录

dp数组表示的意义是从0到i最少切割的次数 

递推公式是 取0到i中间值 j 如果从 j+1到i是回文 那dp[i]=min(dp[i], dp[j]+1) 

初始化先让所有的切割数为个数 如果本身是回文那就是0 (注意 所有判断是否是回文都看isPal数组 最开始动规走一遍就可以之后直接调用了

遍历顺序即从前往后 i在外 j在内

class Solution {
public:int minCut(string s) {vector<vector<bool>> isPal(s.size(), vector<bool>(s.size(), false));for (int i=0; i<s.size(); i++) isPal[i][i]=true;for (int i=s.size(); i>=0; i--) {for (int j=i+1; j<s.size(); j++) {if (s[i]==s[j]) {isPal[i][j] = j==i+1 ? true :isPal[i+1][j-1];}}}vector<int> dp(s.size());for (int i=0; i<s.size(); i++) dp[i]=i;for (int i=0; i<s.size(); i++) {if (isPal[0][i]) {dp[i]=0;continue;}for (int j=0; j<i; j++) {if (isPal[j+1][i]) {dp[i]=min(dp[i], dp[j]+1);}}}return dp[s.size()-1];}
};

673 这题思路还是cr to 代码随想录 但有一点点误区我之前没搞清楚的就是 不管这里动规数组是什么 它定义的找到的最长递增序列都是以当前下标指向的nums为结尾的 所以在遍历的时候也只考虑当前下标大于前面下标的情况

dp数组表示最长递增子序列的长度 count是最长的个数

递推数组  

如果dp[j]+1 == dp[i] 说明找到了另外的一条和现在长度一样的路 但是经过当前 j 指向的元素 count[i]+=count[j]

如果dp[j]+1 > dp[i] 说明经过j的话有更长的路 count[i] = count[j]

dp都取max(dp[i], dp[j]+1)

class Solution {
public:int findNumberOfLIS(vector<int>& nums) {vector<int> dp (nums.size(), 1); //以i指向为结尾的最长递增子序列长度vector<int> count (nums.size(), 1); //最长递增子序列个数int max_len=1;for (int i=0; i<nums.size(); i++) {for (int j=0; j<i; j++) {if (nums[i]>nums[j]) {if (dp[j]+1>dp[i]) {count[i]=count[j];}else if (dp[j]+1==dp[i]) {count[i]+=count[j];//not understand}dp[i]=max(dp[i], dp[j]+1);}max_len = max(max_len, dp[i]);}}int result=0;for (int i=0; i<nums.size(); i++) {if (dp[i]==max_len) result+=count[i];}return result;}
};

841 前两天刚写过的图论题 有点像数的层序遍历 用visited数组来记录是否进入过 que数组来按顺序访问

class Solution {
public:bool canVisitAllRooms(vector<vector<int>>& rooms) {vector<bool> visited(rooms.size(), false);queue<int> que;que.push(0);visited[0]= true;while (!que.empty()) {vector<int> keys = rooms[que.front()]; que.pop();for (int i=0; i<keys.size(); i++) {if (!visited[keys[i]]) {que.push(keys[i]);visited[keys[i]] = true;}}}for (int i=0; i<visited.size(); i++) {if (!visited[i]) return false;}return true;}
};

127 也是几天前刚刚做过的图论题 思路是记得的 模版稍微有点模糊 但也做出来了

这种图论题要记得有visited数组来记录 一来记录到目前单位是几步 二来防止重复计数 这里用的是unordered_map 其实也是当作数组来用 一样的 只是因为这里的index是个string

遍历就是用queue来前进前出的处理 处理当前word时 找出他所有的距离一步的新词 看是否在set里面且没有被遍历过 如果是这样就记录当前到他的步数并加入queue 反之不管

class Solution {
public:int ladderLength(string beginWord, string endWord, vector<string>& wordList) {unordered_set<string> wordSet (wordList.begin(), wordList.end());if (wordSet.find(endWord)==wordSet.end()) return 0;queue<string> que;que.push(beginWord);unordered_map<string, int> visited;visited[beginWord] = 1;while (!que.empty()) {string curr_word = que.front(); que.pop();for (int i=0; i<curr_word.size(); i++) {int count = visited[curr_word];string new_word = curr_word;for (int j=0; j<26; j++) {new_word[i] = 'a'+j;if (new_word==endWord) return count+1;if (wordSet.find(new_word)!=wordSet.end() && visited[new_word]==0) {visited[new_word]=count+1;que.push(new_word);}}}}return visited[endWord];}
};

684 冗余连接问题 查并集的几个private function:

init() 所有的father[i]=i;

find return父节点

connect (int u, int v)  连接两个节点 u <- v

isSame 判断两个节点是否是同父节点

class Solution {
private:int n=1005;vector<int> father = vector<int> (n,0);void init() {for (int i=0; i<n; i++) father[i]=i;}int find (int u) {if (father[u]==u) return u;return father[u]=find(father[u]);}void connect(int u, int v) {u=find(u);v=find(v);if (u==v) return;father[v]=u;}bool isSame (int u, int v) {u=find(u);v=find(v);return u==v;}
public:vector<int> findRedundantConnection(vector<vector<int>>& edges) {init();for (int i=0; i<edges.size(); i++) {if (isSame(edges[i][0], edges[i][1])) return edges[i];connect(edges[i][0], edges[i][1]);}return edges[0];}
};

 657 用了一个unordered_map 从四个char指向对应的移动x y变化值 遍历一遍moves数组 最后判断是否还在原点

class Solution {
public:bool judgeCircle(string moves) {unordered_map<char, vector<int>> dir;dir['R'] = {0,1};dir['L'] = {0,-1};dir['U'] = {-1,0};dir['D'] = {1,0};int loc[] = {0,0};for (int i=0; i<moves.size(); i++) {loc[0] += dir[moves[i]][0];loc[1] += dir[moves[i]][1];}return loc[0]==0 && loc[1]==0;}
};

31 这道题思路重点在于 要找到他的下一个排列(除了自己是最大值这个特殊情况)

首先要尽量保持前面的位数先不动  ->用 i 从后往前找要动的值 (这个值 在他后面有比他大的数)

现在找要跟他换的值 在后面比他大的值里面要找到最小的一个 -> j 从后往前找的第一个就是最小的

why?因为如果最右边的不是最小的 = 说明 的左边和 i 的右边 中间有比 j 指向小的 那么i就应该指向这个数而不是现在的 i 了

其实就是遍历 i 时 从 i 到末尾是个递减序列

i 和 j 换过之后 接下来要让 i+1 位到最后是递增数列 sort或者reserve这一段就可以

class Solution {
public:void nextPermutation(vector<int>& nums) {for (int i=nums.size()-1; i>=0; i--) {for (int j=nums.size()-1; j>i; j--) {if (nums[j]>nums[i]) {int temp = nums[i];nums[i] = nums[j];nums[j] = temp;sort(nums.begin()+i+1, nums.end());return;}}}sort(nums.begin(), nums.end());}
};

463 才写过的岛屿周长问题 如果上下左右出边界或者是海洋就那条边+1在周长里

class Solution {
public:int islandPerimeter(vector<vector<int>>& grid) {int result=0;int dir[4][2] = {{0,1},{0,-1},{1,0},{-1,0}};for (int i=0; i<grid.size(); i++) {for (int j=0; j<grid[0].size(); j++) {if (grid[i][j]==1) {for (int k=0; k<4; k++) {int x=i+dir[k][0];int y=j+dir[k][1];if (x<0||x>=grid.size()||y<0||y>=grid[0].size()||grid[x][y]==0) result++;}}}}return result;}
};

1356 先写一个function来计算每个数换成二进制之后1的个数 然后先根据1的个数来排列 相等时根据数值排序 (再写一个compare function)

class Solution {
private: int how_many_ones (int n) {int count = 0;while (n>0) {count+=n%2;n=n/2;}return count;}
public:vector<int> sortByBits(vector<int>& arr) {unordered_map<int, int> count; for (int i=0; i<arr.size(); i++) {count[arr[i]] = how_many_ones(arr[i]);}sort(arr.begin(), arr.end(), [&count](const int &a, const int &b) {if (count[a]==count[b]) return a<b;return count[a]<count[b];});return arr;}
};

相关文章:

额外题目第4天|132 673 841 127 684 657

132 我发现困难题往往是在中等题的基础上再多了一步 分割最少次数的回文子串 这道题就是在之前动态规划法找回文子串 (leetcode第5题) 的基础上更多 这题还是用动规来写 思路参考代码随想录 dp数组表示的意义是从0到i最少切割的次数 递推公式是 取0到i中间值 j 如果从 j1到…...

HTTP 状态码的分类和含义

HTTP&#xff08;Hypertext Transfer Protocol&#xff09;状态码是由服务器向客户端传输的 HTTP 响应中的一个三位数字代码。它们提供了关于请求的处理状态和结果的信息。以下是一些常见的 HTTP 状态码及其含义&#xff1a; 1xx 信息响应&#xff1a;指示服务器已收到请求&…...

Linux Bridge(网桥)

Linux Bridge简介 Linux Bridge&#xff08;Linux网桥&#xff09;是一个软件层面的网络设备&#xff0c;用于在Linux系统中创建和管理网络桥接。它允许将多个物理或虚拟网络接口连接在一起&#xff0c;以创建一个共享相同网络段的网络。 下面是Linux Bridge的一些关键特点和…...

【数据结构】优先队列

优先队列 API初级实现使用堆实现由下至上的堆有序化&#xff08;上浮&#xff09;由上至下的堆有序化&#xff08;下沉&#xff09;插入和删除元素具体实现 很多情况下我们需要有序的处理输入的元素&#xff0c;但是又不需要输入的元素全部有序&#xff0c;或者不需要一次将它们…...

如何在 Ubuntu 22.04 下编译 StoneDB for MySQL 8.0 | StoneDB 使用教程 #1

作者&#xff1a;双飞&#xff08;花名&#xff1a;小鱼&#xff09; 杭州电子科技大学在读硕士 StoneDB 内核研发实习生 ❝ 大家好&#xff0c;我是 StoneDB 的实习生小鱼&#xff0c;目前正在做 StoneDB 8.0 内核升级相关的一些事情。刚开始接触数据库开发没多久&#xff0c…...

AMEYA360:尼得科科宝旋转型DIP开关系列汇总

旋转型DIP开关 S-4000 电路&#xff1a;BCD(十进制) 代码格式&#xff1a;实码 安装类型&#xff1a;表面贴装 调整位置&#xff1a;顶部 可水洗&#xff1a;无 端子类型&#xff1a;J 引线, 鸥翼型 旋转型DIP开关 SA-7000 电路&#xff1a;BCD(十进制), BCH(十六进制) 代码格式…...

为什么感觉 C/C++ 不火了?

首先C和C是两个非常不一样的编程语言。 C语言在系统开发领域地位非常稳固&#xff0c;几乎没有替代产品。应用层开发近年来略微有被Rust取代的迹象。 C由于支持的编程范式过多&#xff0c;导致不同水平的人写出来的代码质量差异太大&#xff0c;这给软件的稳健性带来了很大的…...

【Linux】在服务器上创建Crontab(定时任务),自动执行shell脚本

业务场景&#xff1a;该文即为上次编写shell脚本的姊妹篇,在上文基础上,将可执行的脚本通过linux的定时任务自动执行,节省人力物力,话不多说,开始操作! 一、打开我们的服务器连接工具 连上服务器后,在任意位置都可以执行:crontab -e 如果没有进入编辑cron任务模式 根据提示查看…...

内存分析工具之Mat

自定义类MatClazz内存个数为9521。当前对象占用内存为16个字节。不包括其属性bytes的字节数。 通过查看MatClazz引用的类之byte数组之bytes。其单个数组占用的字节数为10256。整个内存MatClazz中属性bytes占用的byte[]字节数为97746376&#xff0c;与直方图统计趋近。 通过选…...

【逗老师的PMP学习笔记】项目的运行环境

一、影响项目运行的因素 主要分两种因素 事业环境因素&#xff08;更多的是制约和限制因素&#xff09;组织过程资产&#xff08;可以借鉴的经验和知识&#xff09; 1、细说事业环境因素&#xff08;更多的是制约和限制因素&#xff09; 资源可用性 例如包括合同和采购制约…...

Rust- 模块

&#xff08;1&#xff09;在项目根目录下创建mylib&#xff08;里面实现自定义的外部模块&#xff09; cargo new --lib mylib &#xff08;2&#xff09;在 项目名\mylib\src\lib.rs文件中实现新模块 pub mod add_salary {pub fn study(name: String) {println!("Rust…...

【开源源码学习】

C 迷你高尔夫 一款打高尔夫的游戏。亮点是碰撞反应和关卡设计。 GitHub - mgerdes/Open-Golf: A cross-platform minigolf game written in C. TypeScript 俄罗斯方块 复刻经典的俄罗斯方块&#xff0c;项目采用ReactReduxImmutable的技术栈。 GitHub - chvin/react-tetr…...

CNN-NER论文详解

论文&#xff1a;https://arxiv.org/abs/2208.04534 代码&#xff1a;https://github.com/yhcc/CNN_Nested_NER/tree/master 文章目录 有关工作前期介绍CNN-NER模型介绍 代码讲解主类多头biaffineCNNLoss解码数据传入格式 参考资料 有关工作 前期介绍 过去一共主要有四类方式…...

利用ChatGPT制作行业应用:哪些行业最受益

引言 随着人工智能技术的快速发展&#xff0c;ChatGPT&#xff08;Chat Generative Pre-trained Transformer&#xff09;成为了一种引人注目的工具&#xff0c;它能够生成自然流畅的对话内容。这种技术不仅在娱乐领域有着广泛的应用&#xff0c;还可以在各个行业中发挥重要作…...

【SA8295P 源码分析】60 - QNX Host 如何新增 android_test 分区给 Android GVM 挂载使用

【SA8295P 源码分析】60 - QNX Host 如何新增 android_test 分区给 Android GVM 挂载使用 一、QNX 侧:创建分区、配置下载、配置透传1.1 修改分区表,新增 android_test 分区,大小为 2GByte1.2 配置下载 android_test.img 镜像1.3 配置 /dev/disk/android_test_a 分区透传到 …...

Linux 用户和权限

一、root 用户 root 用户(超级管理员) 无论是windows、Macos、Linux均采用多用户的管理模式进行权限管理。在Linux系统中&#xff0c;拥有最大权限的账户名为&#xff1a;root (超级管理员)。 root用户拥有最大的系统操作权限&#xff0c;而普通用户在许多地方的权限是受限的。…...

分布式应用:ELFK集群部署

目录 一、理论 1.ELFK集群 2.filebeat 3.部署ELK集群 二、实验 1. ELFK集群部署 三、总结 一、理论 1.ELFK集群 &#xff08;1&#xff09;概念 ELFK集群部署&#xff08;FilebeatELK&#xff09;&#xff0c;ELFK ES logstashfilebeatkibana 。 数据流 架构 2.fi…...

Quartz使用文档,使用Quartz实现动态任务,Spring集成Quartz,Quartz集群部署,Quartz源码分析

文章目录 一、Quartz 基本介绍二、Quartz Java 编程1、文档2、引入依赖3、入门案例4、默认配置文件 三、Quartz 重要组件1、Quartz架构体系2、JobDetail3、Trigger&#xff08;1&#xff09;代码实例&#xff08;2&#xff09;SimpleTrigger&#xff08;3&#xff09;CalendarI…...

Go -- 测试 and 项目实战

没有后端基础&#xff0c;学起来真是费劲&#xff0c;所以打算速刷一下&#xff0c;代码跟着敲一遍&#xff0c;有个印象&#xff0c;大项目肯定也做不了了&#xff0c;先把该学的学了&#xff0c;有空就跟点单体项目&#xff0c;还有该看的书.... 目录 &#x1f34c;单元测试…...

GitHub基本使用

GitHub搜索 直接搜索 直接搜索关键字 明确搜索仓库标题 语法&#xff1a;in:name [关键词]展示&#xff1a;比如我们想在GitHub仓库中标题中搜索带有SpringBoot关键词的&#xff0c;我们可以样搜: in:name SpringBoot 明确搜索描述 语法&#xff1a;in:description [关键词]展…...

label-studio的使用教程(导入本地路径)

文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件

今天呢&#xff0c;博主的学习进度也是步入了Java Mybatis 框架&#xff0c;目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学&#xff0c;希望能对大家有所帮助&#xff0c;也特别欢迎大家指点不足之处&#xff0c;小生很乐意接受正确的建议&…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入&#xff0c;一个是通过INMP441麦克风模块采集音频&#xff0c;一个是通过PCM5102A模块播放音频&#xff0c;那如果我们将两者结合起来&#xff0c;将麦克风采集到的音频通过PCM5102A播放&#xff0c;是不是就可以做一个扩音器了呢…...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

《基于Apache Flink的流处理》笔记

思维导图 1-3 章 4-7章 8-11 章 参考资料 源码&#xff1a; https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...

HTML前端开发:JavaScript 常用事件详解

作为前端开发的核心&#xff0c;JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例&#xff1a; 1. onclick - 点击事件 当元素被单击时触发&#xff08;左键点击&#xff09; button.onclick function() {alert("按钮被点击了&#xff01;&…...

JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案

JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停​​ 1. ​​安全点(Safepoint)阻塞​​ ​​现象​​:JVM暂停但无GC日志,日志显示No GCs detected。​​原因​​:JVM等待所有线程进入安全点(如…...

Mysql中select查询语句的执行过程

目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析&#xff08;Parser&#xff09; 2.4、执行sql 1. 预处理&#xff08;Preprocessor&#xff09; 2. 查询优化器&#xff08;Optimizer&#xff09; 3. 执行器…...

git: early EOF

macOS报错&#xff1a; Initialized empty Git repository in /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/.git/ remote: Enumerating objects: 2691797, done. remote: Counting objects: 100% (1760/1760), done. remote: Compressing objects: 100% (636/636…...

Xela矩阵三轴触觉传感器的工作原理解析与应用场景

Xela矩阵三轴触觉传感器通过先进技术模拟人类触觉感知&#xff0c;帮助设备实现精确的力测量与位移监测。其核心功能基于磁性三维力测量与空间位移测量&#xff0c;能够捕捉多维触觉信息。该传感器的设计不仅提升了触觉感知的精度&#xff0c;还为机器人、医疗设备和制造业的智…...