LeetCode双指针专题-一个原数组,一个新数组
相关题目LeetCode27.移除元素题目给你一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。 假设 nums 中不等于 val 的元素数量为k,要通过此题,您需要执行以下操作: 更改 nums 数组,使 nums 的前 k 个元素包含不等于 val 的元素。nums 的其余元素和 nums 的大小并不重要。 返回 k。 示例: 输入: nums = [3,2,2,3], val = 3输出: 2, nums = [2,2,_,_]输入: nums = [0,1,2,2,3,0,4,2], val = 2输出: 5, nums = [0,1,3,0,4,_,_,_] 提示: 0 <= nums.length <= 100 0 <= nums[i] <= 50 0 <= val <= 100 解法 双指针法: fast:遍历数组,负责查找有效数字; slow:标记新数组的位置,覆盖无效元素。 如果 nums[fast] !=...
LeetCode27.移除元素C++
题目给你一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。 假设 nums 中不等于 val 的元素数量为 k,要通过此题,您需要执行以下操作: 更改 nums 数组,使 nums 的前 k 个元素包含不等于 val 的元素。nums 的其余元素和 nums 的大小并不重要。 返回 k。 示例: 输入: nums = [3,2,2,3], val = 3输出: 2, nums = [2,2,_,_]输入: nums = [0,1,2,2,3,0,4,2], val = 2输出: 5, nums = [0,1,3,0,4,_,_,_] 提示: 0 <= nums.length <= 100 0 <= nums[i] <= 50 0 <= val <= 100 答案方法1:笨方法找个数组存不等于val的元素,然后赋值回去。 时间复杂度: O(n)空间复杂度:O(n)class Solution {public: int...
LeetCode88. 合并两个有序数组C++
题目给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。 注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n 。 示例: 输入:nums1 = [1,2,3,0,0,0], m = 3 nums2 = [2,5,6], n = 3输出:[1,2,2,3,5,6] 答案方法1:笨方法最简单粗暴的方法就是用一个数组来存放nums1,将nums1当作最终结果数组。 时间复杂度:O(m + n)空间复杂度:O(m)class Solution {public: void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) { ...
LeetCode背包专题C++
注意以下内容理论部分有参考《代码随想录》,推荐看了代码随想录得背包问题相关内容后再刷代码。代码随想录 0-1背包问题理论基础问题描述一个正在抢劫商店的小偷发现了个商品,第范围为个商品价值value[i]美元,重weight[i]磅,value[i]和weight[i]都是整数。这个小偷希望拿走价值尽量高的商品,但他的背包最多能容纳磅重的商品,是一个整数。他应该拿哪些商品呢?(我们称这个问题是0-1背包问题,因为对每个商品,小偷要么把它完整拿走,要么把它留下;他不能只拿走一个商品的一部分,或者把一个商品拿走多次。) 求解思路二维数组1.确定dp数组以及下标的含义dp[i][j] 表示从下标为[0-i]的物品里任意取,放进容量为j的背包,价值总和最大是多少。 2.确定递推公式对于物体i只有两种情况 不放物品i:背包容量为j,里面不放物品i的最大价值是dp[i - 1][j]。 放物品i:背包空出物品i的容量后,背包容量为j - weight[i],dp[i - 1][j - weight[i]]为背包容量为j - weight[i]且不放物品i的最大价值,那么dp[i -...
LeetCode23合并K个升序链表C++
题目题目描述:给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。 示例 1: 输入:lists = [[1,4,5],[1,3,4],[2,6]]输出: [1,1,2,3,4,4,5,6]解释:链表数组如下:[ 1->4->5, 1->3->4, 2->6]将它们合并到一个有序链表中得到。1->1->2->3->4->4->5->6 示例 2: 输入: []输出: [] 示例 3: 输入: [ [] ]输出: [] 方法 1:逐对合并(分治法)分治法的思路是将K个链表分成两部分,递归合并。 时间复杂度: O(N log K),其中N是所有链表中元素的总数,K是链表的个数。 每次合并的时间复杂度是O(N),但分治递归的深度是log K。 代码实现:class Solution {public: // 递归分治合并 K 个链表 ListNode* findRes1(vector<ListNode*>& lists, int...
LeetCode300最长递增子序列C++(两种解法)
题目给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列,删除(或不删除)数组中的某些元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。 示例 1:输入:nums = [10,9,2,5,3,7,101,18]输出:4解释:最长递增子序列是 [2,3,7,101],因此长度为 4 。示例 2:输入:nums = [0,1,0,3,2,3]输出:4 示例 3:输入:nums = [7,7,7,7,7,7,7]输出:1 提示: 1 <= nums.length <= 2500 -10⁴ <= nums[i] <= 10⁴ 进阶: 你能将算法的时间复杂度降低到 O(n log n) 吗? 解法一:动态规划这道题的目标是找出一个数组中最长的递增子序列的长度,子序列的意思是可以不连续,只要顺序保持不变。 动态规划的方法: 用数组dp,其中 dp[i] 表示以第 i 个数结尾的最长递增子序列的长度。 初始时,每个位置的 dp[i] 都设为...
VSCode使用服务器
一、连接服务器 [!NOTE] 注意不知道那一步让你选择Linux、Windows与Macos。这里让你选择的是你要连接的远程服务器的操作系统类型,一般选Linux就行。 1)安装Remote-SSH插件搜索后安装就行 2)添加服务器连接配置安装完成之后会在左侧新增一个选项卡:远程资源管理器。然后点击SSH旁边的+号,输入远程服务器的地址,账号和ip根据实际情况进行修改。格式如ssh 用户名@服务器IP -p 端口号然后回车,保存刚刚输入的信息到配置文件 3)连接服务器选哪个都行然后输入密码。最后出现下面的界面就成功了 二、断开服务器点击下方的服务器,然后点击关闭远程连接 三、使用服务器1.打开终端用于操作服务器如果下面没有显示终端,可以按如下操作打开。 2.下载服务器的代码1)更推荐直接选择打开文件夹(也可以在终端输入命令)2)选择对应文件后点击确定,这里会需要输入密码3)选择对应的文件下载即可 3.在服务器创建文件1)在合适的文件创建文件或者文件夹如下,使用合适的指令 ls:列出当前目录下的文件和文件夹。 cd:切换目录,比如 cd .....
Hexo解决图片加载失败问题以及Obsidian管理博客
(一)问题如上,出现图片加载不出来等问题 (二)解决方法1)图片存放方式图片要放在与博客名同名的文件夹中 2)图片使用方式采用方式使用图片 替代文本:当图片无法加载时,会显示这个文本,方便读者理解图片内容,也对无障碍阅读有帮助。 图片路径:本地文件路径或网络 URL。示例: 3)更改_config.yml文件找到post_asset_folder: false替换成post_asset_folder: truemarked: prependRoot: true postAsset: truepost_asset_folder: true开启文章资源文件夹(Post Asset Folder) 功能,这样每篇文章就可以有独立的资源目录。marked.prependRoot: true是解析 Markdown 时,自动加上站点根目录。postAsset: true让 Markdown 正确加载文章资源文件夹的内容。 4)安装 hexo-asset-image 插件使用下面的指令安装npm...
LeetCode31下一个排列C++
问题描述整数数组的一个 排列 就是将其所有成员以序列或线性顺序排列。 例如,arr = [1,2,3] ,以下这些都可以视作 arr 的排列:[1,2,3]、[1,3,2]、[3,1,2]、[2,3,1] 。 整数数组的 下一个排列 是指其整数的下一个字典序更大的排列。更正式地,如果数组的所有排列根据其字典顺序从小到大排列在一个容器中,那么数组的 下一个排列 就是在这个有序容器中排在它后面的那个排列。如果不存在下一个更大的排列,那么这个数组必须重排为字典序最小的排列(即,其元素按升序排列)。 例如,arr = [1,2,3] 的下一个排列是 [1,3,2] 。 类似地,arr = [2,3,1] 的下一个排列是 [3,1,2] 。 而 arr = [3,2,1] 的下一个排列是 [1,2,3] ,因为 [3,2,1] 不存在一个字典序更大的排列。 给你一个整数数组 nums ,找出 nums 的下一个排列。 必须原地修改,只允许使用额外常数空间。 示例 1:输入:nums = [1,3,4,2,2]输出:2 示例 2:输入:nums =...
LeetCode75颜色分类C++
问题描述给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums ,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。 我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。 必须在不使用库内置的 sort 函数的情况下解决这个问题。 示例 输入: nums = [2, 0, 2, 1, 1, 0] 输出: [0, 0, 1, 1, 2,...