首页 > 其他分享 >leetcode-287. 寻找重复数-数组构成的链表

leetcode-287. 寻找重复数-数组构成的链表

时间:2022-10-10 17:45:18浏览次数:60  
标签:slow nums int fast 链表 数组 leetcode 287 指针

287. 寻找重复数

  • 由题中数字都在 [1, n] 范围内(包括 1 和 n),可知至少存在一个重复的整数。

  • 维护一个映射关系f(n)= index -> num,其中数组的下标index,数字为num

当一个数组里有环的时候,例如

[1,3,4,2,2]  [3,1,3,4,2]

映射为:

0 -> 1   0 -> 3

1 -> 3   1 -> 1

2 -> 4   2 -> 3

3 -> 2   3 -> 4

4 -> 2   4 -> 2

得链表:

我们得到入环点的数 = 重复的数

这道题就变成了快慢指针找入环点的题,只是快慢指针表示不同

public int findDuplicate(int[] nums) {
        int slow = 0;//slow指针从0开始
        int fast = 0;//fast指针从0开始
        slow = nums[slow]; //慢指针一次走一步
        fast = nums[nums[fast]];  //快指针一次走两步
        while(slow != fast){ //当快慢指针相遇的时候得到结果,如果没相遇则一直循环
            //有题目可知这个数组里绝对有一个重复的,所以必定成环
            slow = nums[slow]; //慢指针一次走一步
            fast = nums[nums[fast]]; //快指针一次走两步
        }
        fast = 0; //让快指针回到开头
        while(slow != fast){ //当快慢指针相遇的时候得到结果,没相遇则一直循环
            slow = nums[slow]; //慢指针一次走一步
            fast = nums[fast]; //快指针一次走两步
        }
        return slow; //最终相遇返回slow就是成环的点
    }

 

标签:slow,nums,int,fast,链表,数组,leetcode,287,指针
From: https://www.cnblogs.com/phonk/p/16776580.html

相关文章

  • leetcode349.两个数组的交集
    1.题目描述给定两个数组nums1和nums2,返回它们的交集。输出结果中的每个元素一定是唯一的。我们可以不考虑输出结果的顺序。2.示例示例1:输入:nums1=[1,2,2,......
  • leetcode 236. Lowest Common Ancestor of a Binary Tree 二叉树的最近公共祖先(中等)
    一、题目大意给定一个二叉树,找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树T的两个节点p、q,最近公共祖先表示为一个节点x,满......
  • 链表
    链表删除链表元素Leetcode19.删除链表的倒数第N个节点问题在于如何定位倒数第n个节点。可以先P1从头遍历n个节点,然后再以P2从头开始遍历,直到P1到尾节点。此时P2刚好会......
  • leetcode-75. 颜色分类]
    75.颜色分类荷兰国旗问题,直接分成三部分[0区,1区,2区]0区最右边为less指针,开始在0的左边-12区最左边为more指针,开始在数组最后一个数的右边nums.lengthindex为指针,......
  • LeetCode算法笔记 88. 合并两个有序数组
    importjunit.framework.TestCase;importjava.util.Arrays;publicclassLeetCode02_2extendsTestCase{/***88.合并两个有序数组*给你两个......
  • LeetCode算法笔记 1. 两数之和
    publicclassLeetCode02_1extendsTestCase{/***1.两数之和*给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值tar......
  • Leetcode 11 -- 双指针&&贪心
    题目说明盛水最多的容器题目要求我们找出两个边界\(L\)和\(R\),使得容量:\(min(right[L],right[R])*(R-L)\)的值最大。思路算法不是玄学。首先,两层for循......
  • leetcode 145. Binary Tree Postorder Traversal 二叉树的后序遍历 (中等)
    一、题目大意给你一棵二叉树的根节点root,返回其节点值的后序遍历。示例1:输入:root=[1,null,2,3]输出:[3,2,1]示例2:输入:root=[]输出:[]示例3:输入:root......
  • LeetCode 2434. Using a Robot to Print the Lexicographically Smallest String
    原题链接在这里:https://leetcode.com/problems/using-a-robot-to-print-the-lexicographically-smallest-string/题目:Youaregivenastring s andarobotthatcurr......
  • leetcode-动态规划1-4
    目录leetcode-动态规划题目方法leetcode-动态规划题目1.斐波拉切数列2.爬楼梯3.买卖股票最佳时机(一次买卖)4.买卖股票最佳时机2(多次买卖)leetcode-动态规划题目方法五......