双指针_划分
文章平均质量分 52
当我们需要枚举数组中的两个元素时,如果我们发现随着第一个元素的递增,第二个元素是递减的,那么就可以使用双指针的方法,将枚举的时间复杂度从 O(N2) 减少至 O(N)。为什么是 O(N) 呢?这是因为在枚举的过程每一步中,左指针会向右移动一,均摊下来
answer_yym
且随疾风前行
展开
-
删除有重复数组的重复项1-2
给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。更改数组 nums ,使 nums 的前 k 个元素包含唯一元素,并按照它们最初在 nums 中出现的顺序排列。给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使得出现次数超过两次的元素只出现两次 ,返回删除后数组的新长度。因为题目二允许最多出现2次,所以可以在相等的情况下也存在拷贝的情况,所以写if(cur==nums[k])重复元素,原地,一次,二次。原创 2024-06-17 17:31:30 · 353 阅读 · 0 评论 -
88. 合并两个有序数组
为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。1.1 调用库函数std::merge(nums1.begin(),nums1.begin()+m,nums2.begin(),nums2.begin()+n,res.begin())输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3。合并结果是 [1,2,2,3,5,6] ,其中斜体加粗标注的为 nums1 中的元素。原创 2024-06-17 12:30:20 · 324 阅读 · 0 评论 -
判断子序列二刷
字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。你可以认为 s 和 t 中仅包含英文小写字母。字符串 t 可能会很长(长度 ~= 500,000),而 s 是个短字符串(长度 <=100)。著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。给定字符串 s 和 t ,判断 s 是否为 t 的子序列。来源:力扣(LeetCode)原创 2024-05-24 10:10:15 · 214 阅读 · 0 评论 -
有序链表合并两个002
1、描述21将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->42、关键字链表,有序,合并3、思路1、构造一个新的,然后一个一个的比较,2、递归4、notes递归3要素1、终止条件当其中任一个遍历到最后就结束,把后边的直接加上来2、递归返回值:每一层递归都返回排序好的链表头3、当前层递归操作如果当原创 2020-09-24 20:05:06 · 88 阅读 · 0 评论 -
链表取中间值
文章目录1、描述2 思路 解法一3、notes:4、复杂度5、code2、解法二 思路:3、notes:4、复杂度5、code:1、描述给定一个带有头结点 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。示例 1:输入:[1,2,3,4,5]输出:此列表中的结点 3 (序列化形式:[3,4,5])来源:力扣(LeetCode)链接:著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。2 思路 解法一 用一个计数器统计链表长度,然原创 2021-08-18 15:41:49 · 320 阅读 · 0 评论 -
反转链表双指针迭代
文章目录1、反转单链表。2、思路1、反转单链表。示例:输入: 1->2->3->4->6->NULL输出: 6->4->3->2->1->NULL2、思路申请一个pre指针指向NULL,再申请一个cur指针指向头迭代式的往后走,当cur指向原来链表的NULL时,pre就指向了最后一个元素,返回pre就好了,函数的返回值类型是指针,而定义的pre也是指针,所以直接返回就好了代码/** * Definition for sing原创 2021-08-17 19:45:07 · 96 阅读 · 0 评论 -
有效三角形的个数
文章目录1、描述2、关键字3、思路4、notes5、复杂度6、code1、描述给定一个包含非负整数的数组,你的任务是统计其中可以组成三角形三条边的三元组个数。示例 1:输入: [2,2,3,4]输出: 3解释:有效的组合是:2,3,4 (使用第一个 2)2,3,4 (使用第二个 2)2,2,3注意:数组长度不超过1000。数组里整数的范围为 [0, 1000]。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/valid-tr原创 2021-08-04 09:37:35 · 142 阅读 · 0 评论 -
有序矩阵中查找,横竖各自有序的二维数组
文章目录1、描述2、关键字3、思路4、nodes5、复杂度6、code1、描述在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。示例:现有矩阵 matrix 如下:[[1, 4, 7, 11, 15],[2, 5, 8, 12, 19],[3, 6, 9, 16, 22],[10, 13, 14, 17, 24],[18, 21, 2原创 2021-07-13 20:58:04 · 243 阅读 · 0 评论 -
两个链表的第一个公共节点001
1、描述52输入两个链表,找出它们的第一个公共节点。2、关键字链表,找相同3、思路注意:是第一个公共子节点:相交后面的都相等了。而不是节点的val值相等的节点,题目链接1、双指针:两个走过自己的路,再走对方的路,如果有相同节点,则会两个都走了L1 + L2 - C的节点个数时候相遇,如果没有相同节点:1、如果两个节点个数相同,会在第一次各自都走到最后时候返回NULL,2、如果两个节点个数不同,则会两个都走完两个的时候结束,返回NULL.2、set查找,先把第一个链表存起来,然后再遍历第二个原创 2020-09-25 11:22:26 · 65 阅读 · 0 评论 -
求和为s的两个数字
文章目录1、描述2、关键字3、思路4、notes5、复杂度6、code1、描述输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可。示例 1:输入:nums = [2,7,11,15], target = 9输出:[2,7] 或者 [7,2]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/he-wei-sde-liang-ge-shu-zi-lcof著作权归领扣网络所有原创 2021-06-02 20:16:24 · 115 阅读 · 0 评论 -
合并两个有序链表
1、描述合并两个有序链表3、思路两个指针,开始遍历4、notes搞一个dum前置节点做标记,5、复杂度时间:O(n+m)空间:O(1)不算结果占用的空间,节点引用 dumdum , curcur 使用常数大小的额外空间6、code/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(原创 2021-05-23 22:18:26 · 72 阅读 · 0 评论 -
移除元素+删除重复元素
文章目录1、描述2、关键字3、思路4、notes5、复杂度6、code7、昨天删除重复元素,只留一个7.2、code1、描述给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/remove-el原创 2021-04-19 09:10:47 · 205 阅读 · 0 评论 -
删除链表的倒数第n个元素
1、描述19、给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。进阶:你能尝试使用一趟扫描实现吗?2、关键字链表、到数n3、思路双指针4、note链表常用技巧设置一个哑巴前置头节点,语法: ListNode* dumpNode=new ListNode(0,head); // 构造哑节点特殊情况:链表为空!和链表长度不到 n5、复杂度:时间:O(N)空间:O(1)6、code/** * Definition for singly-linked list.原创 2021-03-12 22:29:05 · 137 阅读 · 0 评论 -
在数组中找3个连续的奇数判有无
1、描述1550给你一个整数数组 arr,请你判断数组中是否存在连续三个元素都是奇数的情况:如果存在,请返回 true ;否则,返回 false 。示例 1:输入:arr = [2,6,4,1]输出:false解释:不存在连续三个元素都是奇数的情况。示例 2:输入:arr = [1,2,34,3,4,5,7,23,12]输出:true解释:存在连续三个元素都是奇数的情况,即 [5,7,23] 。来源:力扣(LeetCode)链接:https://leetcode-cn.com/prob原创 2020-12-20 19:49:22 · 660 阅读 · 0 评论 -
旋转链表呵呵
1、描述61给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数。示例 1:输入: 1->2->3->4->5->NULL, k = 2输出: 4->5->1->2->3->NULL解释:向右旋转 1 步: 5->1->2->3->4->NULL向右旋转 2 步: 4->5->1->2->3->NULL示例 2:输入: 0->1->2原创 2020-09-22 12:56:49 · 51 阅读 · 0 评论 -
验证回文串002
1、描述125给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串。示例 1:输入: “A man, a plan, a canal: Panama”输出: true示例 2:输入: “race a car”输出: false来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/valid-palindrome著作权归领扣网络所有。商业转载请联系官方授权,非商业转载原创 2020-06-19 21:13:15 · 95 阅读 · 0 评论 -
最长连续递增序列001
文章目录1、描述示例 1:示例 2:2、思路3、notes4、复杂度5、code5、1 滑动窗口5、2 双指针思路1、描述674给定一个未经排序的整数数组,找到最长且连续的的递增序列,并返回该序列的长度示例 1:输入: [1,3,5,4,7]输出: 3解释: 最长连续递增序列是 [1,3,5], 长度为3。尽管 [1,3,5,7] 也是升序的子序列, 但它不是连续的,因为5和7在原数组里被4隔开。示例 2:输入: [2,2,2,2,2]输出: 1解释: 最长连续递增序列是 [2], 长原创 2020-06-13 18:47:45 · 158 阅读 · 0 评论 -
求3数之和等于0的序列002
1、题目描述15给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/3sum著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。示例给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[原创 2020-06-12 22:26:06 · 276 阅读 · 2 评论 -
两个数组的交集_双指针_二分
#1、描述349给定两个数组,编写一个函数来计算它们的交集。示例 1:输入: nums1 = [1,2,2,1], nums2 = [2,2]输出: [2]示例 2:输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出: [9,4]说明: 输出结果中的每个元素一定是唯一的。 我们可以不考虑输出结果的顺序。来源:力...原创 2020-04-27 21:22:38 · 213 阅读 · 0 评论