leetcode287. 寻找重复数(二分法)
生活随笔
收集整理的這篇文章主要介紹了
leetcode287. 寻找重复数(二分法)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
給定一個包含 n + 1 個整數(shù)的數(shù)組 nums,其數(shù)字都在 1 到 n 之間(包括 1 和 n),可知至少存在一個重復(fù)的整數(shù)。假設(shè)只有一個重復(fù)的整數(shù),找出這個重復(fù)的數(shù)。
示例 1:
輸入: [1,3,4,2,2]
輸出: 2
代碼
class Solution {public int findDuplicate(int[] nums) {int n=nums.length,l=1,r=n-1;while (l<r){int mid = (l + r+1) >>> 1;int count=0;for(int num:nums)//統(tǒng)計小于mid數(shù)字出現(xiàn)的次數(shù){if(num<mid)count++;}if(count>=mid)//如果小于mid數(shù)字出現(xiàn)的次數(shù)大于mid,則小于mid的數(shù)字出現(xiàn)重復(fù)r=mid-1;else l=mid;}return l;} }解題思路
和環(huán)形鏈表一樣,快慢指針,快的每次兩跳,慢的一跳,相遇的時候,慢回起點(diǎn),快慢都變?yōu)槊恳淮我惶?#xff0c;入口就是重復(fù)元素
代碼
class Solution {public int findDuplicate(int[] nums) {int s=0,f=0;do {s=nums[s];f=nums[nums[f]];}while (s!=f);s=0;do {s=nums[s];f=nums[f];}while (s!=f);return s;} }總結(jié)
以上是生活随笔為你收集整理的leetcode287. 寻找重复数(二分法)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: leetcode面试题 10.03. 搜
- 下一篇: leetcode1292. 元素和小于等