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] 都设为...
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,...
leetcode169多数元素C++
[!NOTE]以下内容包含Chatgpt的帮助 题目描述给定一个大小为 n 的数组 nums,找出其中出现次数超过 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 示例 示例 1: 输入: nums = [3,2,3]输出: 3 示例 2: 输入: nums = [2,2,1,1,1,2,2]输出: 2 进阶要求 你能在时间复杂度 O(n)、空间复杂度 O(1) 的条件下完成算法吗? 解法 1:哈希表(map 计数)思路 我们可以使用哈希表(unordered_map)统计每个元素出现的次数,然后找到出现次数超过 ⌊ n/2 ⌋ 的元素。 代码 #include <iostream>#include <vector>#include <unordered_map>using namespace std;class Solution {public:int majorityElement(vector<int>& nums) { ...
LeetCode136只出现一次的数字C++
[!NOTE]以下内容包含Chatgpt的帮助 题目描述给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。 示例 1: 输入: nums = [2,2,1]输出: 1 示例 2: 输入: nums = [4,1,2,1,2]输出: 4 示例 3: 输入: nums = [1]输出: 1 解法题目要求 O(n) 时间复杂度和 O(1) 空间复杂度,我们可以使用 异或(XOR)运算 来解决。 异或运算性质 a ⊕ a = 0(任何数和自己异或结果为 0) a ⊕ 0 = a(任何数和 0 异或不变) a ⊕ b ⊕ c = a ⊕ c ⊕ b(异或运算满足交换律和结合律) 由于数组中除了一个数出现 1 次,其余的数都出现 2 次,那么所有数字进行异或运算后: 成对出现的数会互相抵消变成 0 最终只剩下那个只出现一次的数 C++ 代码class Solution {public: int...
C++重载运算符
[!NOTE]以下内容为Chatgpt生成后整理 1. 基本概念(1)什么是运算符重载?运算符重载(Operator Overloading)允许我们为已有的运算符(如 +、-、*、== 等)定义新的行为,以便这些运算符能够处理我们自定义的类型(如类)。换句话说,运算符重载让运算符能够支持自定义类的对象,使得这些对象在运算符使用时像内置数据类型一样工作。 (2)为什么需要运算符重载?运算符重载能够让我们: 提高代码的可读性和可维护性。 让自定义类的对象可以使用常见的运算符,方便直接参与运算。 例如,考虑两个 Complex 类对象相加,如果没有运算符重载,我们可能需要调用复杂的成员函数来完成加法操作,而运算符重载可以让加法操作变得简洁直观。 C++ 允许重载的大部分运算符 不能重载的运算符: ::(作用域解析符) .*(成员指针访问运算符) .(成员访问运算符) sizeof(求大小) typeid(运行时类型识别) 2. 重载运算符的方式 作为成员函数(operator+、operator==...
C++自定义排序方式
注意以下内容为Chatgpt生成后整理 在 C++ 中,自定义比较函数(通常是一个函数或者函数对象)和仿函数(函数对象)都可以用于自定义排序规则或比较方式,但它们的实现方式和使用方法有所不同。 1. 自定义比较函数自定义比较函数是指一个普通的函数,它用于定义如何比较两个对象。通常,这个函数有两个参数,返回值是一个布尔值,表示这两个对象之间的比较结果。 特点: 形式:自定义比较函数通常是一个独立的普通函数。 使用方式:它可以作为参数传递给排序算法(如 std::sort)或数据结构(如 std::priority_queue)等,定义对象的排序或比较规则。 返回类型:一般返回一个 bool 类型,表示是否满足某种条件(例如:a < b,返回 true 表示 a 小于 b)。 示例:#include <iostream>#include <vector>#include <algorithm>using namespace std;// 自定义比较函数bool compare(int a, int b) { return a...
C++堆及实现,priority_queue
[!NOTE]以下内容为Chatgpt生成后整理 堆(Heap)是一种特殊的树形数据结构,通常用来实现优先队列、排序算法等功能。堆是一种完全二叉树,它满足特定的顺序性质。我们可以分为最大堆和最小堆两种。 1. 堆的定义堆是一个完全二叉树,其节点满足堆的性质: 最大堆(Max Heap):每个父节点的值大于或等于其子节点的值,即根节点是树中的最大值。 最小堆(Min Heap):每个父节点的值小于或等于其子节点的值,即根节点是树中的最小值。 堆的特点: 完全二叉树:除了最底层外,其他层的节点都是满的,最底层的节点从左到右排列。完全二叉树的结构保证了堆的高效性。 堆的顺序性质:堆中任意节点的值与其子节点的值有顺序关系,最大堆的父节点值大于子节点,而最小堆则相反。 2....
LeetCode二分查找专题
基础知识二分查找是一种在有序数组中查找特定元素的算法,它通过不断将搜索区间减半来快速定位目标元素。对于搜索区间的定义有三种方式,分别是左闭右闭,左闭右开和左开右开。 这三者之间的主要区别在于以下两点(1)每次折半的时候两端的坐标应该移到mid的位置上还是多偏移一个元素(2)while判断结束的条件是 left<right,left<=right,还是left<right-1 left和right的偏移区别 ...