找出数组中被其他元素整除的元素_「每日一题」数组中重复的数字
生活随笔
收集整理的這篇文章主要介紹了
找出数组中被其他元素整除的元素_「每日一题」数组中重复的数字
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
題目描述
在一個長度為 n 的數(shù)組里的所有數(shù)字都在 0 到 n-1 的范圍內(nèi)。數(shù)組中某些數(shù)字是重復(fù)的,但不知道有幾個數(shù)字是重復(fù)的,也不知道每個數(shù)字重復(fù)幾次。請找出數(shù)組中任意一個重復(fù)的數(shù)字。
Input:{2, 3, 1, 0, 2, 5}Output:2解題思路
要求時間復(fù)雜度 O(N),空間復(fù)雜度 O(1)。因此不能使用排序的方法,也不能使用額外的標(biāo)記數(shù)組。
對于這種數(shù)組元素在 [0, n-1] 范圍內(nèi)的問題,可以將值為 i 的元素調(diào)整到第 i 個位置上進行求解。本題要求找出重復(fù)的數(shù)字,因此在調(diào)整過程中,如果第 i 位置上已經(jīng)有一個值為 i 的元素,就可以知道 i 值重復(fù)。
以 (2, 3, 1, 0, 2, 5) 為例,遍歷到位置 4 時,該位置上的數(shù)為 2,但是第 2 個位置上已經(jīng)有一個 2 的值了,因此可以知道 2 重復(fù):
public boolean duplicate(int[] nums, int length, int[] duplication) { if (nums == null || length <= 0) return false; for (int i = 0; i < length; i++) { while (nums[i] != i) { if (nums[i] == nums[nums[i]]) { duplication[0] = nums[i]; return true; } swap(nums, i, nums[i]); } } return false;}private void swap(int[] nums, int i, int j) { int t = nums[i]; nums[i] = nums[j]; nums[j] = t;} 與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的找出数组中被其他元素整除的元素_「每日一题」数组中重复的数字的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: element vue 获取select
- 下一篇: vba 判断文本框内容是否为空_校验数据