高级农民
- 积分
- 1109
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2016-12-4
- 最后登录
- 1970-1-1
|
注册一亩三分地论坛,查看更多干货!
您需要 登录 才可以下载或查看附件。没有帐号?注册账号
x
关于双指针大致可分为四大类型
1. 快慢指针 对应题号 27, 283, 26, 80, 287
2. 左右指针 对应题号 167, 15, 16, 18, 11, 42
3. 后序指针 对应题号 88, 977
4. 其它类型 对应题号 459, 28
此贴会着重介绍快慢指针系列。
快慢指针最直观的一题是关于linked list的题目LeetCode 141 题
顾名思义,就是定义两个指针,一个跑两个单位,一个跑一个单位直到达到目地为止
我们先来看27题 Remove Element
这道题的题意就是,在同一个array中删除指定的val。难点有2。第一是在同一array 操作,不能产生额外的space,第二是删除后,若后面还有element还要把删除空的位置补齐。
思路就是
1.定义一个Slow 指针 K = 0
2. 循环整个array (相当于一个快指针)
3. 如果当前点不等于 指定的 val 则把慢指针 位置 设置为快指针位置的value
来看代码
- class Solution {
- public int removeElement(int[] nums, int val) {
- int k = 0;
- for(int i = 0; i < nums.length; i++){
- if(nums[i] != val){
- nums[k++] = nums[i];
- }
- }
- return k;
- }
- }
复制代码 那么练习一下 可尝试一下283题
这道题就是把所有的0 放到末尾,有了上面的例子这道题就是很简单。多了一点就是要k跑完之后要一直跑到array末尾把0都续上
- class Solution {
- public void moveZeroes(int[] nums) {
- int k = 0;
- for(int i = 0; i < nums.length; i++){
- if(nums[i] != 0){
- nums[k++] = nums[i];
- }
- }
- while(k != nums.length) nums[k++] = 0;
- }
- }
复制代码 26 和 80题都是差不多思路 也就不多说上code
Leetcode 26
- class Solution {
- public int removeDuplicates(int[] nums) {
- int k = 1;
- for(int i = 1; i < nums.length; i++){
- if(nums[i] != nums[k - 1]){
- nums[k ++] = nums[i];
- }
- }
- return k;
- }
- }
复制代码 Leecode 80
- class Solution {
- public int removeDuplicates(int[] nums) {
- int k = 2;
- for(int i = 2; i < nums.length; i++){
- if(nums[i] != nums[k - 2]){
- nums[k ++] = nums[i];
- }
- }
- return k;
- }
- }
复制代码 这几道题里最难得一题就是287了。这道题的思路和142这道题是一样的。如果有duplicate就说明会有一个环存在。
具体的数学公式请看我上一个帖子
传送门 https://www.1point3acres.com/bbs/thread-816987-1-1.html
- class Solution {
- public int findDuplicate(int[] nums) {
- int slow = nums[0];
- int fast = nums[nums[0]];
- //找到 两点相遇点
- while(slow != fast){
- slow = nums[slow];
- fast = nums[nums[fast]];
- }
- slow = 0;
- //慢指针重新出发 当和fast相遇的时候就是结果出现的时候
- while(slow != fast){
- slow = nums[slow];
- fast = nums[fast];
- }
- return fast;
- }
- }
复制代码 |
上一篇: Leetcode给了个感恩节discount下一篇: 领英近期力扣高频题
|