当前位置: 首页 > news >正文

LeetCode -- Find the Duplicate Number

问题描述:


 Given an array nums containing n + 1 integers where each integer is between 1 and n (inclusive), prove that at least one duplicate number must exist. Assume that there is only one duplicate number, find the duplicate one.


Note:
You must not modify the array (assume the array is read only).
You must use only constant, O(1) extra space.
Your runtime complexity should be less than O(n2).
There is only one duplicate number in the array, but it could be repeated more than once.


在一个数组中找到重复的那个。


由于题目限制了只能使用O(1)的空间,也不能修改参数数组。
因此不能排序,也不能创造一个标记数组来一次遍历进行'填空';并且,由于重复元素可以出现多次,也无法使用等差数列公式求和=>s,再用数组和-s的方式。
搜到了一种解法,比较巧妙,思路类似于那个题目:在一个链表中找到环,并找出那个环的位置。
1. 使用了快慢指针
2. 在快慢指针相遇的位置开始,慢指针与另一个从起始位置出发的指针每次走一步,直到它们相遇,就是那个重复节点发生的地方。


以下实现参考了链接:
http://bookshadow.com/weblog/2015/09/28/leetcode-find-duplicate-number/



实现代码:


public class Solution {
    public int FindDuplicate(int[] nums) 
    {
        // define slow and fast , fast each time move 2 times
        var slow = 0;
    	var fast = 0;
    	while(true)
    	{
    		slow = nums[slow];
    		fast = nums[nums[fast]];
    		if(slow == fast){
    			break;
    		}
    	}
    	
    	// now, lets create another pointer 'finder' from the start position. 
    	// slow will stay where it is.
    	// finder and slow each time move one step. next time this meet is where duplicate happens
    	var finder = 0;
    	while(true)
    	{
    		slow   = nums[slow];
    		finder = nums[finder];
    		if (slow == finder){
    			return slow;
    		}
    	}
    }
}


相关文章:

  • LeetCode -- Group Anagrams
  • LeetCode -- Kth Largest Element in an Array
  • 最近评论回复汇总
  • LeetCode -- Maximum Gap
  • OO系统分析员之路--用例分析系列(8)--如何编写一份完整的UML需求规格说明书[整理重发]...
  • LeetCode -- Maximum Subarray
  • ArcGIS Server Java ADF 案例教程 25
  • LeetCode -- Minimum Depth of Binary Tree
  • ArcGIS Server Java ADF 案例教程 26
  • LeetCode -- Minimum Path Sum
  • LeetCode -- Multiply Strings
  • ArcGIS Server Java ADF 案例教程 27
  • LeetCode -- Permutations II
  • SQL语句性能调整之ORACLE的执行计划
  • LeetCode -- Product of Array Except Self
  • SegmentFault for Android 3.0 发布
  • 【干货分享】SpringCloud微服务架构分布式组件如何共享session对象
  • JAVA_NIO系列——Channel和Buffer详解
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • LeetCode算法系列_0891_子序列宽度之和
  • Lucene解析 - 基本概念
  • mysql 数据库四种事务隔离级别
  • node-glob通配符
  • React16时代,该用什么姿势写 React ?
  • React系列之 Redux 架构模式
  • VUE es6技巧写法(持续更新中~~~)
  • 从 Android Sample ApiDemos 中学习 android.animation API 的用法
  • 湖北分布式智能数据采集方法有哪些?
  • 扩展资源服务器解决oauth2 性能瓶颈
  • 如何正确理解,内页权重高于首页?
  • #if #elif #endif
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • (02)Hive SQL编译成MapReduce任务的过程
  • (2)Java 简介
  • (免费领源码)python+django+mysql线上兼职平台系统83320-计算机毕业设计项目选题推荐
  • (十三)Java springcloud B2B2C o2o多用户商城 springcloud架构 - SSO单点登录之OAuth2.0 根据token获取用户信息(4)...
  • (十五)devops持续集成开发——jenkins流水线构建策略配置及触发器的使用
  • (学习日记)2024.01.19
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default
  • *** 2003
  • .NET 6 Mysql Canal (CDC 增量同步,捕获变更数据) 案例版
  • .Net 8.0 新的变化
  • .net FrameWork简介,数组,枚举
  • .NET 反射的使用
  • .Net 路由处理厉害了
  • .NET 线程 Thread 进程 Process、线程池 pool、Invoke、begininvoke、异步回调
  • .NET 依赖注入和配置系统
  • .Net 知识杂记
  • .NET处理HTTP请求
  • .net对接阿里云CSB服务
  • @param注解什么意思_9000字,通俗易懂的讲解下Java注解
  • @Transaction注解失效的几种场景(附有示例代码)
  • [ vulhub漏洞复现篇 ] ThinkPHP 5.0.23-Rce
  • [acm算法学习] 后缀数组SA
  • [C语言]——函数递归