- 博客(40)
- 收藏
- 关注
原创 小鑫的算法之路:希尔排序
插入排序遍历待排序数据集合,每次将元素插入到其前面已排序数据集合的合适位置。插入排序与打麻将类似,在整理最初摸起来的13张牌过程中,不断将未整理的牌插入至已整理的牌的合适位置。插入算法的核心思路是不断地将元素插入至合适的位置。若将数据集合按照从小到大的进行排序,代码如下:template<typename T>void insertSort(std::vector<T>& data){ for (size_t i = 1; i < data.siz
2022-05-29 22:34:45 139
原创 小鑫的算法之路:leetcode0347 前 K 个高频元素
题目给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。提示:1 <= nums.length <= 105k 的取值范围是 [1, 数组中不相同的元素的个数]题目数据保证答案唯一,换句话说,数组中前 k 个高频元素的集合是唯一的解法1:优先队列在题目中,需要返回出现频率前k高的元素,因此需要首先统计出元素出现的个数,此时需要遍历数组数据,并通过哈希表保存数据。然后基于优先队列保存出现频率前k高的元素,最终得出结果。代码
2022-05-26 00:36:04 132
原创 小鑫的算法之路:堆
背景队列的特点是先进先出(FIFO),在日常生活中很常见,比如说食堂中就餐的队列,基本都是谁先排队,谁就先打餐吃饭。然而,还有其他一些场景在生活中也很常见,比如说在医院排队求诊的病人,如果来了一位严重的病人,那么就需要急诊,否者如果按照普通队列排队等待。如果其他病人求诊完,那就会危及这位病人的生命,因此这位病人需要立即就医,优先级很高。就这引出了优先队列,优先队列的特点不是先进先出,而是基于优先级出队。对于优先队列,在数据结构上不能依赖普通队列进行实现,而需要基于堆实现,才能高效实现入队和基于优先级出
2022-05-25 00:04:17 123
原创 小鑫的算法之路:leetcode0104 二叉树的最大深度
题目给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。解法1:递归 DFS对于二叉树的最大深度,可通过递归进行DFS。当节点为空时,直接返回0。若节点不为空,则在左右子树的最大深度值的基础上加1即可。代码如下:class Solution {public: int maxDepth(TreeNode* root) { if (root == nullptr) { retu
2022-05-20 23:36:43 142
原创 小鑫的算法之路:leetcode0100 相同的树
题目给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。提示:两棵树上的节点数目都在范围 [0, 100] 内-104 <= Node.val <= 104解法1:递归,深度优先搜索两棵树如果相同,即两棵树的结构完全相同,同时节点具有相同的值。那么可以同时对两颗树采用前序遍历递归处理。代码如下:class Solution {public: bool isSameTree(Tr
2022-05-20 08:00:32 246
原创 小鑫的算法之路:leetcode0101 对称二叉树
题目给你一个二叉树的根节点 root , 检查它是否轴对称。提示:树中节点数目在范围 [1, 1000] 内-100 <= Node.val <= 100**进阶:**你可以运用递归和迭代两种方法解决这个问题吗?解法1:递归如果一颗二叉树沿着根节点轴对称,那么只需沿着根节点判断左右孩子节点是否轴对称即可。注意在递归函数中,代码如下:class Solution {public: bool isSymmetric(TreeNode* root) {
2022-05-18 23:51:25 85
原创 小鑫的算法之路:leetcode0102 二叉树的层序遍历
题目给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。解法1:迭代层序遍历又为广度优先遍历。对于二叉树的层序遍历,在每一层从左到右按照先后顺序将节点保存至辅助队列中。由于在返回的结果需要集中逐层的显示结果,那么在访问队列元素前,需要先获取到当前队列中节点的个数,然后只处理对应个数的同一层数的节点,并且将节点的孩子节点继续加入至队列中。代码如下:class Solution {public: vector<vector<int&g
2022-05-18 23:09:34 72
原创 小鑫的算法之路:leetcode0145 二叉树的后序遍历
题目给你一棵二叉树的根节点 root ,返回其节点值的 后序遍历 。提示:树中节点的数目在范围 [0, 100] 内-100 <= Node.val <= 100解法1:递归二叉树具有天然的递归结构,后序遍历是在访问完节点的左右子树后才对数据进行操作。代码如下:class Solution {public: vector<int> postorderTraversal(TreeNode* root) { vector<int>
2022-05-18 00:41:36 74
原创 小鑫的算法之路:leetcode0144 二叉树的前序遍历
题目给你二叉树的根节点 root ,返回它节点值的 前序 遍历。提示:树中节点数目在范围 [0, 100] 内-100 <= Node.val <= 100解法1:递归二叉树具有天然的递归结构,前序遍历是在访问节点左右子树前对数据进行操作。代码如下:class Solution {public: vector<int> preorderTraversal(TreeNode* root) { vector<int> result{
2022-05-17 23:45:26 146
原创 小鑫的算法之路:leetcode0094 二叉树的中序遍历
题目给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。提示:树中节点数目在范围 [0, 100] 内-100 <= Node.val <= 100解法1:递归二叉树具有天然的递归结构,中序遍历是在访问完节点的左子树后且访问右子树前对数据进行操作。代码如下:class Solution {public: vector<int> inorderTraversal(TreeNode* root) { vector<int>
2022-05-17 00:47:15 88
原创 小鑫的算法之路:leetcode1011 在 D 天内送达包裹的能力
题目传送带上的包裹必须在 days 天内从一个港口运送到另一个港口。传送带上的第 i 个包裹的重量为 weights[i]。每一天,我们都会按给出重量(weights)的顺序往传送带上装载包裹。我们装载的重量不会超过船的最大运载重量。返回能在 days 天内将传送带上的所有包裹送达的船的最低运载能力。注意:货物必须按照给定的顺序装运解法1:二分查找该题属于在一个船的运载能力区间范围选择一个最低运载能力使得货物能够在目标天数内完成。如果不限时间,那么最低运载能力为最大包裹重量。如果限时间且仅仅只有
2022-05-15 22:46:51 257
原创 小鑫的算法之路:leetcode0875 爱吃香蕉的珂珂
题目珂珂喜欢吃香蕉。这里有 n 堆香蕉,第 i 堆中有 piles[i] 根香蕉。警卫已经离开了,将在 h 小时后回来。珂珂可以决定她吃香蕉的速度 k (单位:根/小时)。每个小时,她将会选择一堆香蕉,从中吃掉 k 根。如果这堆香蕉少于 k 根,她将吃掉这堆的所有香蕉,然后这一小时内不会再吃更多的香蕉。珂珂喜欢慢慢吃,但仍然想在警卫回来前吃掉所有的香蕉。返回她可以在 h 小时内吃掉所有香蕉的最小速度 k(k 为整数)。解法1:二分查找由于珂珂喜欢慢慢吃,那么她吃香蕉的速度应该是越小越好,在n堆香
2022-05-15 22:18:51 141
原创 小鑫的算法之路:二分查找
定义若从已排序的数组中查找指定的数据,首先查询最中间的数据,如果该数据为指定的目标值,则查找结束。否则根据中间值与目标值的大小差异,从左区间或者右区间继续循环查找,直到查找到指定的目标值,或者循环至待查找区间为空,那么指定的目标值则不存在。由于每次查找都能排除待查找数据集合区间一半的范围,二分查找也被成为折半查找。二分查找效率很高,算法时间复杂度为O(logn)。关键点在二分查找中,需要注意如下两个关键点:1、顺序数组二分查找只能用于已排序的数组中,只有这样每次查询才能排除掉一半的空间。2、
2022-05-15 13:56:47 160
原创 小鑫的算法之路:leetcode0704 二分查找
题目给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。解法1:递归该题中整形数组为有序数组,属于典型的二分查找应用。递归代码如下:class Solution {public: int search(vector<int>& nums, int target) { return search(nums, 0, static_cast&
2022-05-13 23:34:37 100
原创 小鑫的算法之路:快速排序
定义作为20世纪十大算法之一,快速算法被广泛应用于计算机工程的各个方面。快速排序主要有两个优点,其一它是原地排序,空间消耗基本忽略不计,其二是算法时间复杂度为O(nlogn),排序效率很高。快速排序是一种递归算法。它将待排序数据集合基于某个基准值按照特定的原则分成左右两个子区间,然后分别将左右两个子区间继续递归快速排序。在基于基准值将待排序数据集合分成左右两个区间时,该基准值已经找到了其在最终排序结果中的位置,当最终两个子区间完成排序后,整个数据集合也完成排序。快速排序是一种随机化算法。针对一些特殊的
2022-05-13 00:05:48 213
原创 小鑫的算法之路:leetcode0075 颜色分类
题目给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums ,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。必须在不使用库的sort函数的情况下解决这个问题。提示:n == nums.length1 <= n <= 300nums[i] 为 0、1 或 2进阶:你可以不使用代码库中的排序函数来解决这道题吗?你能想出一个仅使用常数空间的一趟扫描算法吗?解法1:三路切分在题目中,分别
2022-05-13 00:03:20 335
原创 小鑫的算法之路:leetcode0215 数组中的第K个最大元素
题目给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。解法1:排序对于返回第k个最大的元素,可以对整个数组从大到小进行快速排序,然后返回索引为k - 1的元素即可。代码如下:class Solution {public: int findKthLargest(vector<int>& nums, int k) { std::sort(nums.begi
2022-05-12 00:50:42 512
原创 小鑫的算法之路:归并排序
定义归并排序通过递归不断地将待排序数据集合平均分成左右两个区间分别排序,然后将左右两个完成排序的区间进行归并处理,最终使得整个数据集合完成排序。代码template<typename T>class mergeSort {public: void sort(std::vector<T>& data) { // 归并排序依赖于辅助空间,非原地算法 // 针对辅助空间,需要一次性分配好所有辅助空间,避免临时内存分配
2022-05-08 21:16:19 529
原创 小鑫的算法之路:leetcodeOffer051 数组中的逆序对
题目在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。解法1:暴力求解如果需要求出数组中的逆序对的总数,需要对数组进行双重遍历,找出数组中所有的逆序对。代码如下:class Solution {public: int reversePairs(vector<int>& nums) { int result = 0; for (size_t i = 0; i <
2022-05-08 17:16:22 174
原创 小鑫的算法之路:leetcode0232 用栈实现队列
题目请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty):实现 MyQueue 类:void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并返回元素int peek() 返回队列开头的元素boolean empty() 如果队列为空,返回 true ;否则,返回 false提示:1 <= x <= 9最多调用 100 次 push、pop、peek 和 empty假设所有操作都
2022-05-06 22:48:13 188
原创 小鑫的算法之路:leetcode0225 用队列实现栈
题目请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。实现 MyStack 类:void push(int x) 将元素 x 压入栈顶。int pop() 移除并返回栈顶元素。int top() 返回栈顶元素。boolean empty() 如果栈是空的,返回 true ;否则,返回 false 。提示:1 <= x <= 9最多调用100 次 push、pop、top 和 empty每次调用 pop
2022-05-05 23:23:07 329
原创 小鑫的算法之路:leetcode0020 有效的括号
题目给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。提示:1 <= s.length <= 104s 仅由括号 '()[]{}' 组成解法1:借助栈为了判断括号是否匹配,需要将出现过的左括号进行保存处理,当出现第一个右括号时,需要将其与最后保存的左括号进行匹配处理。那么,左括号的保存处理可通过栈处理,因为栈具有后进先出的性质。代码如下:cla
2022-05-04 10:39:22 162
原创 小鑫的算法之路:leetcode0080 删除有序数组中的重复项 II
题目给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 最多出现两次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成解法1:双指针法该题和leetcode第26题类似,不过本题的差异是每个重复最多出现两次。那么应该通过一个变量来记录重复的次数,如果超过2两次才能删除掉后面重复的元素。代码如下:class Solution {public: int removeDuplicates(vecto
2022-04-28 01:02:33 1659
原创 小鑫的算法之路:leetcode0026 删除有序数组中的重复项
题目给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。由于在某些语言中不能改变数组的长度,所以必须将结果放在数组nums的第一部分。更规范地说,如果在删除重复项之后有 k 个元素,那么 nums 的前 k 个元素应该保存最终结果。将最终结果插入 nums 的前 k 个位置后返回 k 。不要使用额外的空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。解法:双指针在
2022-04-27 23:39:12 54
原创 小鑫的算法之路:leetcode0021 合并两个有序链表
题目将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。解法1:迭代法临时定义一个哑结点并作为新链表的头节点,分别同时遍历两个升序链表的节点,哪个节点值小则插入至新链表的尾部,直到遍历的链表中一个被全部访问完,此时将另外一个链表直接插到新链表尾部即可。代码如下:class Solution {public: ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) { L
2022-04-27 00:51:07 1285
原创 小鑫的算法之路:leetcode0234 回文链表
题目给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。进阶:你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?解法1如果要比较是否为回文链表,可将链表中的数据保存至一个vector容器中,然后将链表由头到尾,vector容器由尾到头,逐一对值进行比较。如果值完全一致,则为回文链表,否则不为回文链表。代码如下:class Solution {public: bool isPalindrome(ListNod
2022-04-27 00:24:17 61
原创 小鑫的算法之路:leetcode0328 奇偶链表
题目给定单链表的头节点 head ,将所有索引为奇数的节点和索引为偶数的节点分别组合在一起,然后返回重新排序的列表。第一个节点的索引被认为是 奇数 , 第二个节点的索引为 偶数 ,以此类推。请注意,偶数组和奇数组内部的相对顺序应该与输入时保持一致。你必须在 O(1) 的额外空间复杂度和 O(n) 的时间复杂度下解决这个问题。解法1该题将索引为奇数的节点和索引为偶数的节点分别组合在一起,那么可以新创建两个哑节点,一个包含索引为奇数的节点,另外一个包含索引为偶数的节点。最后将两个链表合并起来即可。代码
2022-04-26 00:04:40 1412
原创 小鑫的算法之路:leetcode0203 移除链表元素
题目给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。解法1:迭代法针对节点删除,为了操作的归一,需要新创建一个哑结点,并指向该头结点。然后遍历链表的节点,如果该节点的值刚好等于val,那么直接删除该节点即可。代码如下:class Solution {public: ListNode* removeElements(ListNode* head, int val) { ListNod
2022-04-25 22:43:59 191
原创 小鑫的算法之路:leetcode0206 反转链表
题目给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。进阶:链表可以选用迭代或递归方式完成反转。你能否用两种方法解决这道题?解法1:迭代法反转链表,就是按照相反的顺序对链表进行反转,这样尾部的节点将变成头部的节点。解题思路如下:先初始化一个哑结点,然后遍历链表,不断的将节点插入到哑结点的下一个节点,这样最终遍历完后链表就完成了反转。代码如下:class Solution {public: ListNode* reverseList(ListNode* head) {
2022-04-25 00:58:58 491
原创 小鑫的算法之路:leetcode0019 删除链表的倒数第 N 个结点
题目给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。进阶:你能尝试使用一趟扫描实现吗?解法1:获取链表顺数位置如果是顺数第n个节点,那么直接遍历链表,找到对应位置节点的前一个节点,然后执行删除顺数第n个节点即可。然而本题中却是让删除链表的倒数第n个节点。那么可以先遍历链表,获取到链表的节点个数,然后根据倒数第n个节点,获取该节点对应顺数的位置,然后执行删除节点的操作即可。同时在删除时,为了避免对头节点的特殊操作,初始化一个哑结点,便于删除时对链表中所有节点的归一处理。代码如下:
2022-04-24 00:58:22 67
原创 小鑫的算法之路:leetcode0160 相交链表
题目给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。注意,函数返回结果后,链表必须 保持其原始结构 。进阶:你能否设计一个时间复杂度 O(m + n) 、仅用 O(1) 内存的解决方案?解法1:哈希去重如果两个链表相交,先遍历其中一个链表,将节点保存至哈希表中,然后遍历另外一个链表,如果在哈希表中能够找到遍历的节点值,那么该节点肯定就是相交节点。代码如下:class Solution {public:
2022-04-24 00:22:59 53
原创 小鑫的算法之路:leetcode0142 环形链表 II
题目给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。注意不允许修改链表。进阶:你能用 O(1)(即,常量)内存解决此问题吗?解法1:哈希去重由于需要返回开
2022-04-23 19:48:36 875
原创 小鑫的算法之路:leetcode0141 环形链表
题目给你一个链表的头节点 head ,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。注意:pos 不作为参数进行传递 。仅仅是为了标识链表的实际情况。如果链表中存在环 ,则返回 true 。 否则,返回 false 。**进阶:**你能用 O(1)(即,常量)内存解决此问题吗?解法1:哈希去重判断链表中是否成环,可以通过一个哈希表保存已
2022-04-22 22:12:45 307
原创 小鑫的算法之路:leetcode0707 设计链表
题目设计链表的实现。您可以选择使用单链表或双链表。单链表中的节点应该具有两个属性:val 和 next。val 是当前节点的值,next 是指向下一个节点的指针/引用。如果要使用双向链表,则还需要一个属性 prev 以指示链表中的上一个节点。假设链表中的所有节点都是 0-index 的。在链表类中实现这些功能:get(index):获取链表中第 index 个节点的值。如果索引无效,则返回-1。addAtHead(val):在链表的第一个元素之前添加一个值为 val 的节点。插入后,新节点将成为链表
2022-04-21 00:43:00 55
原创 小鑫的算法之路:leetcode0027 移除元素
题目给你一个数组 nums 和一个值 val,你需要原地移除所有数值等于val的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并原地修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例1输入:nums = [3,2,2,3], val = 3输出:2, nums = [2,2]解释:函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。你不需要考虑数组中超出新长度后面的元素。例如,函数返回的新长度为 2 ,而 n
2022-04-19 00:23:59 52
原创 小鑫的算法之路:leetcode0283 移动零
题目给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。请注意 ,必须在不复制数组的情况下原地对数组进行操作。示例如下:输入: nums = [0,1,0,3,12]输出: [1,3,12,0,0]输入: nums = [0]输出: [0]**进阶:**你能尽量减少完成的操作次数吗?解法1题目要求不能对数组进行复制,那么是不能借助额外的空间来处理,如下思路就不可行:复制数组,遍历原数组,如果值不为0,则存放至复制的数组中去。在最终的结果中,
2022-04-18 01:01:50 713
原创 小鑫的算法之路:leetcode0070 爬楼梯
题目假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?提示:1 <= n <= 45解法1:记忆化搜索假如需要到达第n阶楼梯时,可以在n-1阶时爬1阶,或者n-2阶爬2阶到达。那么递推公式很容易得到,即f(n) = f(n - 1) + f(n - 2);递归终止条件有两个,一个是n = 1时,f(1) = 1,因为只有一种方式到第一个台阶,另外一个是n = 2时,f(2) = 2,因为有两种方式到第二个台阶。但是
2022-04-17 00:30:10 70
原创 小鑫的算法之路:leetcode0003 无重复字符的最长子串
题目给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。提示信息如下:0 <= s.length <= 5 * 10 ^ 4s 由英文字母、数字、符号和空格组成解法1考虑到不含重复字符,那么就需要考虑去重,那么应该用一个哈希表保存子串中的字符。由于是最长子串,且动态变化,那么子串的区间是动态变化,可以使用双指针进行滑动窗口处理。算法整体思路如下:通过双指针动态确定一个子串的滑动窗口区间,并且通过一个哈希表保存该子串中的字符。如果右指针指向的字符已经在哈希表中存在
2022-04-14 00:13:13 828
原创 小鑫的算法之路:leetcode0002 两数相加
题目给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。解法1由于数字已经按照逆序的方式存储,那么按照正常的加法进行相加即可,但是尤其需要注意的是进位,如果两数之和超过9,就存在进位的处理。进位的处理尤其需要关注最后一次计算的几位,很容易遗忘掉这里的细节。例如99 + 11 = 110,但是很容易忘记掉百位的1,得出错误
2022-04-10 21:57:31 57
原创 小鑫的算法之路:leetcode0001 双数之和
题目给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。提示**进阶:**你可以想出一个时间复杂度小于 O(n2) 的算法吗?解法1梦开始的地方,如果在一个整数数组中需要找到两个值的之和等于整数目标值 ,可以直接遍历暴力查询,代码如下:class leetcode0001 {public:
2022-04-10 17:51:25 102
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人