指针
惠菁
我见过大海,看过繁星,但唯独遇见你,是我长久以来,所有奔赴的意义。
展开
-
【Java|golang】143. 重排链表---快慢指针
给定一个单链表 L 的头节点 head ,单链表 L 表示为: L0 → L1 → … → Ln - 1 → Ln 请将其重新排列后变为: L0 → Ln → L1 → Ln - 1 → L2 → Ln - 2 → … 不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。原创 2023-07-31 12:00:44 · 483 阅读 · 0 评论 -
【Java|golang】1124. 表现良好的最长时间段---双指针
给你一份工作时间表 hours,上面记录着某一位员工每天的工作小时数。原创 2023-02-14 10:48:44 · 83 阅读 · 0 评论 -
【Java|golang】1234. 替换子串得到平衡字符串---双指针
有一个只含有 'Q', 'W', 'E', 'R' 四种字符,且长度为 n 的字符串。原创 2023-02-13 20:24:35 · 476 阅读 · 0 评论 -
【Java|golang】1802. 有界数组中指定下标处的最大值---双指针
给你三个正整数 n、index 和 maxSum 。你需要构造一个同时满足下述所有条件的数组 nums(下标 从 0 开始 计数):原创 2023-01-25 20:19:58 · 505 阅读 · 0 评论 -
【Java】面试题 17.09. 第 k 个数--三指针+桶排序
有些数的素因子只有 3,5,7,请设计一个算法找出第 k 个数。注意,不是必须有这些素因子,而是必须不包含其他的素因子。例如,前几个数按顺序应该是 1,3,5,7,9,15,21。原创 2022-09-28 11:05:14 · 262 阅读 · 0 评论 -
【Java】1417. 重新格式化字符串---双指针
请你将该字符串重新格式化,使得任意两个相邻字符的类型都不同。也就是说,字母后面应该跟着数字,而数字后面应该跟着字母。原创 2022-08-11 13:12:25 · 86 阅读 · 0 评论 -
【Java|golang】942. 增减字符串匹配---使用双指针
由范围 [0,n] 内所有整数组成的 n + 1 个整数的排列序列可以表示为长度为 n 的字符串 s ,其中: 如果 perm[i] < perm[i + 1] ,那么 s[i] == ‘I’ 如果 perm[i] > perm[i + 1] ,那么 s[i] == ‘D’ 给定一个字符串 s ,重构排列 perm 并返回它。如果有多个有效排列perm,则返回其中 任何一个 。 示例 1: 输入:s = “IDID” 输出:[0,4,1,3,2] 示例 2: 输入:s = “III” 输出:[0原创 2022-05-09 09:20:43 · 433 阅读 · 0 评论 -
【Java|golang】713. 乘积小于 K 的子数组---使用双指针,发掘连续数组的规律
给你一个整数数组 nums 和一个整数 k ,请你返回子数组内所有元素的乘积严格小于 k 的连续子数组的数目。 示例 1: 输入:nums = [10,5,2,6], k = 100 输出:8 解释:8 个乘积小于 100 的子数组分别为:[10]、[5]、[2],、[6]、[10,5]、[5,2]、[2,6]、[5,2,6]。 需要注意的是 [10,5,2] 并不是乘积小于 100 的子数组。 示例 2: 输入:nums = [1,2,3], k = 0 输出:0 提示: 1 <= nums.len原创 2022-05-05 11:35:08 · 70 阅读 · 0 评论 -
【Java|golang】868. 二进制间距---转化为二进制字符串,使用快慢指针
给定一个正整数 n,找到并返回 n 的二进制表示中两个 相邻 1 之间的 最长距离 。如果不存在两个相邻的 1,返回 0 。 如果只有 0 将两个 1 分隔开(可能不存在 0 ),则认为这两个 1 彼此 相邻 。两个 1 之间的距离是它们的二进制表示中位置的绝对差。例如,“1001” 中的两个 1 的距离为 3 。 示例 1: 输入:n = 22 输出:2 解释:22 的二进制是 “10110” 。 在 22 的二进制表示中,有三个 1,组成两对相邻的 1 。 第一对相邻的 1 中,两个 1 之间的距离为原创 2022-04-28 17:44:08 · 913 阅读 · 0 评论 -
【Java】524. 通过删除字母匹配到字典里最长单词---使用lamda表达式对集合进行排序,通过双指针进行判断是否匹配,快速解决问题!!!
给你一个字符串 s 和一个字符串数组 dictionary 作为字典,找出并返回字典中最长的字符串,该字符串可以通过删除 s 中的某些字符得到。 如果答案不止一个,返回长度最长且字典序最小的字符串。如果答案不存在,则返回空字符串。 示例 1: 输入:s = “abpcplea”, dictionary = [“ale”,“apple”,“monkey”,“plea”] 输出:“apple” 示例 2: 输入:s = “abpcplea”, dictionary = [“a”,“b”,“c”] 输出:“a”原创 2021-09-14 21:22:35 · 107 阅读 · 0 评论 -
【Java】剑指 Offer 22. 链表中倒数第k个节点---使用快慢双指针,遍历同一个链表!!!
输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。 例如,一个链表有 6 个节点,从头节点开始,它们的值依次是 1、2、3、4、5、6。这个链表的倒数第 3 个节点是值为 4 的节点。 示例: 给定一个链表: 1->2->3->4->5, 和 k = 2. 返回链表 4->5. 代码: public ListNode getKthFromEnd(ListNode head, int k) { ListNode原创 2021-09-03 20:49:55 · 79 阅读 · 0 评论 -
【Java】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: 输入:people = [3原创 2021-08-26 12:32:30 · 92 阅读 · 0 评论 -
【Java】167. 两数之和 II - 输入有序数组---使用双指针遍历numbers数组,更根据不同情况,移动指针,快速遍历!!!
给定一个已按照 升序排列 的整数数组 numbers ,请你从数组中找出两个数满足相加之和等于目标数 target 。 函数应该以长度为 2 的整数数组的形式返回这两个数的下标值。numbers 的下标 从 1 开始计数 ,所以答案数组应当满足 1 <= answer[0] < answer[1] <= numbers.length 。 你可以假设每个输入只对应唯一的答案,而且你不可以重复使用相同的元素。 示例 1: 输入:numbers = [2,7,11,15], target =原创 2021-08-13 13:19:29 · 85 阅读 · 0 评论 -
【java】27. 移除元素---时间复杂度O(N)!!!
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。 说明: 为什么返回数值是整数,但输出的答案是数组呢? 请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。 你可以想象内部操作如下: // nums 是以“引用”方式传递的。也就是说,不对实参作任何拷贝 int l原创 2021-04-19 10:02:37 · 445 阅读 · 0 评论 -
【java】26. 删除有序数组中的重复项---双指针指向数组,无需额外空间!!!
给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。 不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。 说明: 为什么返回数值是整数,但输出的答案是数组呢? 请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。 你可以想象内部操作如下: // nums 是以“引用”方式传递的。也就是说,不对实参做任何拷贝 int len = removeDuplicates(num原创 2021-04-18 20:15:33 · 443 阅读 · 0 评论