![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
双指针
文章平均质量分 53
双指针
向光.
路过人间,绝非一瞬间.
展开
-
⭐北邮复试刷题1793. 好子数组的最大分数___(基于快排的划分思想/基于快排的划分思想的优化过程/基于贪心的双指针操作)__每日一题
1.即开始为拿到数组全部 计算分数 后来对每次找到的min值的下标左右两侧进行划分 即将min去掉 从而可以构建出两个新数组;2.对新数组继续计算分数 与前一次比较取最大 接着继续找到min值的下标 继续划分;3.直到划分的所有数组均结束或下标出现非法继而停止则结束此过程 则此时max即为最大;1.优化划分过程 对多个min可同时划分 而不是一个一个划分;2.即如5 5 1 4 5 4 1 —> 5 5 | 1 | 4 5 4 | 1 故只需检查5 5 和 4 5 4 即可;1.思路即注意到原创 2024-03-19 11:39:45 · 335 阅读 · 0 评论 -
⭐北邮复试刷题LCR 018. 验证回文串__双指针 (力扣119经典题变种挑战)
给定一个字符串 s ,验证 s 是否是 回文串 ,只考虑字母和数字字符,可以忽略字母的大小写。输入: s = “A man, a plan, a canal: Panama”我们先将字符串转换成小写,再去除除数字和字母之外的其他字符,使用双指针比对即可;解释:“amanaplanacanalpanama” 是回文串。本题中,将空字符串定义为有效的 回文串。输入: s = “race a car”解释:“raceacar” 不是回文串。字符串 s 由 ASCII 字符组成。原创 2024-02-21 23:20:33 · 430 阅读 · 0 评论 -
LeetCode.745. 前缀和后缀搜索____双字典树+双指针
f(stringpref,stringsuff)返回词典中具有前缀prefix和后缀suff的单词的下标。如果存在不止一个满足要求的下标,返回其中最大的下标。//返回0,因为下标为0的单词前缀prefix=“a”且后缀suff=“e”。进行查询,但是对于后缀我们发现无法直接处理,所以我们可以反面思考,从反面出发,即我们在将单词存进字典树时,如果全部倒序存储,那么我们在查询有后缀。设计一个包含一些单词的特殊词典,并能够通过前缀和后缀来检索单词。...原创 2022-07-17 10:19:12 · 187 阅读 · 0 评论 -
2022年度杭州未来科技城数字经济人才编程大赛02.黑白棋游戏_____滑动窗口
现有一个黑白棋游戏,初始时给出一排棋子,记作数组chess,其中白色棋子记作0,黑色棋子记作1。输入chess=[1,1,0,1,0,1,0,0,1,0,1]最佳方案为[1,1,1,1,1,1,0,0,0,0,0],输入chess=[1,0,1,0,1,0]输入chess=[0,0,0,1,0][1,1,1,0,0,0],交换1次;[0,1,1,1,0,0],交换2次;[0,0,1,1,1,0],交换1次;[0,0,0,1,1,1],交换2次。...原创 2022-07-16 13:22:11 · 585 阅读 · 0 评论 -
LeetCode.556. 下一个更大元素 III___暴力DFS与双指针查找
给你一个正整数 n ,请你找出符合条件的最小整数,其由重新排列 n 中存在的每位数字组成,并且其值大于 n 。如果不存在这样的正整数,则返回 -1 。注意 ,返回的整数应当是一个 32 位整数 ,如果存在满足题意的答案,但不是 32 位整数 ,同样返回 -1 。首先最直白的想法就是我们可以求出所有的排列,然后从这些排列中找出恰好大于n的数即可。但是这种方法会爆内存。需要注意的是在递归回溯删除的时候,由于这里和子集不一样,是存在重复元素的,所以不能直接根据元素删,因为可能会删成别的位置的元素,所以我们原创 2022-07-04 15:59:51 · 82 阅读 · 0 评论 -
Leetcode.1208. 尽可能使字符串相等——滑动窗口思想
1208. 尽可能使字符串相等给你两个长度相同的字符串,s 和 t。将 s 中的第 i 个字符变到 t 中的第 i 个字符需要 |s[i] - t[i]| 的开销(开销可能为 0),也就是两个字符的 ASCII 码值的差的绝对值。用于变更字符串的最大预算是 maxCost。在转化字符串时,总开销应当小于等于该预算,这也意味着字符串的转化可能是不完全的。如果你可以将 s 的子字符串转化为它在 t 中对应的子字符串,则返回可以转化的最大长度。如果 s 中没有子字符串可以转化成 t 中对应的子字符串,则原创 2022-01-11 08:26:13 · 122 阅读 · 0 评论 -
12.29——两数之和大礼包(二分/哈希/双指针)
12.29每日一题①—— 两数之和给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。示例 1:输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。示例 2:输入:nums =原创 2021-12-30 09:04:51 · 96 阅读 · 0 评论 -
Leetcode.125. 验证回文串---双指针
125. 验证回文串给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串。示例 1:输入: "A man, a plan, a canal: Panama"输出: true解释:"amanaplanacanalpanama" 是回文串示例 2:输入: "race a car"输出: false解释:"raceacar" 不是回文串 提示:1 <= s.length <= 2 * 105字原创 2021-11-12 21:26:02 · 83 阅读 · 0 评论 -
Leetcode.392. 判断子序列---哈希思想/双指针
392. 判断子序列给定字符串 s 和 t ,判断 s 是否为 t 的子序列。字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。进阶:如果有大量输入的 S,称作 S1, S2, … , Sk 其中 k >= 10亿,你需要依次检查它们是否为 T 的子序列。在这种情况下,你会怎样改变代码?致谢:特别感谢 @pbrother 添加此问题并且创建所有测试用例。示例 1:输入:s原创 2021-11-04 10:31:37 · 113 阅读 · 0 评论 -
Leetcode.881. 救生艇---双指针+贪心
881. 救生艇第 i 个人的体重为 people[i],每艘船可以承载的最大重量为 limit。每艘船最多可同时载两人,但条件是这些人的重量之和最多为 limit。返回载到每一个人所需的最小船数。(保证每个人都能被船载)。示例 1:输入:people = [1,2], limit = 3输出:1解释:1 艘船载 (1, 2)示例 2:输入:people = [3,2,2,1], limit = 3输出:3解释:3 艘船分别载 (1, 2), (2) 和 (3)示例 3:输入原创 2021-09-27 21:59:14 · 117 阅读 · 0 评论 -
Leetcode.9. 回文数---双指针
9. 回文数给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。示例 1:输入:x = 121输出:true示例 2:输入:x = -121输出:false解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。示例 3:输入:x = 10输出:false解释:从右向左读, 为 01 。因此它不是一个回文原创 2021-08-17 17:47:32 · 301 阅读 · 0 评论 -
LCP 18. 早餐组合---排序+双指针
LCP 18. 早餐组合小扣在秋日市集选择了一家早餐摊位,一维整型数组 staple 中记录了每种主食的价格,一维整型数组 drinks 中记录了每种饮料的价格。小扣的计划选择一份主食和一款饮料,且花费不超过 x 元。请返回小扣共有多少种购买方案。注意:答案需要以 1e9 + 7 (1000000007) 为底取模,如:计算初始结果为:1000000008,请返回 1示例 1:输入:staple = [10,20,5], drinks = [5,5,2], x = 15输出:6解释:小原创 2021-06-27 11:50:24 · 149 阅读 · 0 评论 -
leetcode.160. 相交链表---双指针
160. 相交链表给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。图示两个链表在节点 c1 开始相交:题目数据 保证 整个链式结构中不存在环。注意,函数返回结果后,链表必须 保持其原始结构 。示例 1:输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3输出:Intersected at原创 2021-06-05 09:38:34 · 154 阅读 · 0 评论 -
leetcode.633. 平方数之和---双指针
633. 平方数之和给定一个非负整数 c ,你要判断是否存在两个整数 a 和 b,使得 a2 + b2 = c 。示例 1:输入:c = 5输出:true解释:1 * 1 + 2 * 2 = 5示例 2:输入:c = 3输出:false示例 3:输入:c = 4输出:true示例 4:输入:c = 2输出:true示例 5:输入:c = 1输出:true 提示:0 <= c <= 2^31 - 1题解:首先最直白的便是直接暴力。但会超时原创 2021-04-28 20:37:20 · 89 阅读 · 0 评论 -
leetcode.26. 删除有序数组中的重复项---双指针
26. 删除有序数组中的重复项给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。说明:为什么返回数值是整数,但输出的答案是数组呢?请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。你可以想象内部操作如下:// nums 是以“引用”方式传递的。也就是说,不对实参做任何拷贝int len = r原创 2021-04-18 16:07:21 · 76 阅读 · 0 评论 -
力扣80. 删除有序数组中的重复项 II----双指针
80. 删除有序数组中的重复项 II给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 最多出现两次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。说明:为什么返回数值是整数,但输出的答案是数组呢?请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。你可以想象内部操作如下:// nums 是以“引用”方式传递的。也就是说,不对实参做任何拷贝int len =原创 2021-04-09 19:56:31 · 242 阅读 · 0 评论 -
力扣88. 合并两个有序数组----倒序遍历双指针
88. 合并两个有序数组给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 的空间大小等于 m + n,这样它就有足够的空间保存来自 nums2 的元素。示例 1:输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3输出:[1,2,2,3,5,6]示例 2:输入:nu原创 2021-04-05 20:13:58 · 216 阅读 · 0 评论 -
力扣344. 反转字符串--双指针
344. 反转字符串编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。示例 1:输入:[“h”,“e”,“l”,“l”,“o”]输出:[“o”,“l”,“l”,“e”,“h”]示例 2:输入:[“H”,“a”,“n”,“n”,“a”,“h”]输出:[“h”,“a”,“n”,“n”,“a”,原创 2021-01-12 21:11:17 · 118 阅读 · 0 评论 -
力扣680. 验证回文字符串 Ⅱ---双指针查找(暴力法与贪心法)
680. 验证回文字符串 Ⅱ给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。示例 1:输入: “aba”输出: True示例 2:输入: “abca”输出: True解释: 你可以删除c字符。注意:字符串只包含从 a-z 的小写字母。字符串的最大长度是50000。题解:方法一:双指针搜索与暴力因为题目为“最多删除一个”,所以我们可以先看一下一个不删除的情况的时,他是不是一个回文字符串。若是直接返回1,不是的话开始进行“删除”的操作。根据暴力法,不用思考太多原创 2021-01-07 19:37:28 · 147 阅读 · 0 评论 -
力扣 125. 验证回文串--双指针查找
125. 验证回文串给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串。示例 1:输入: “A man, a plan, a canal: Panama”输出: true示例 2:输入: “race a car”输出: false题解:题目很简单我们只需要双指针查找,利用ascii码值比对即可。bool isPalindrome(char * s){ int i=0,j=strlen(s)-1;原创 2021-01-07 17:42:37 · 114 阅读 · 0 评论 -
力扣 844. 比较含退格的字符串---二法(栈与双指针)
844. 比较含退格的字符串给定 S 和 T 两个字符串,当它们分别被输入到空白的文本编辑器后,判断二者是否相等,并返回结果。 # 代表退格字符。注意:如果对空文本输入退格字符,文本继续为空。示例 1:输入:S = “ab#c”, T = “ad#c”输出:true解释:S 和 T 都会变成 “ac”。示例 2:输入:S = “ab##”, T = “c#d#”输出:true解释:S 和 T 都会变成 “”。示例 3:输入:S = “a##c”, T = “#a#c”输出:true原创 2021-01-06 20:31:40 · 198 阅读 · 0 评论 -
力扣1030. 距离顺序排列矩阵单元格理解
力扣 1030. 距离顺序排列矩阵单元格***题目介绍给出 R 行 C 列的矩阵,其中的单元格的整数坐标为 (r, c),满足 0 <= r < R 且 0 <= c < C。另外,我们在该矩阵中给出了一个坐标为 (r0, c0) 的单元格。返回矩阵中的所有单元格的坐标,并按到 (r0, c0) 的距离从最小到最大的顺序排,其中,两单元格(r1, c1) 和 (r2, c2) 之间的距离是曼哈顿距离,|r1 - r2| + |c1 - c2|。(你可以按任何满足此条件的顺序.原创 2020-11-17 13:33:37 · 124 阅读 · 0 评论