數組中重復的數字(劍指offer)
阿新 • • 發佈:2019-04-21
tro off lse esc ted color style ise strong
題目描述
在一個長度為n的數組裏的所有數字都在0到n-1的範圍內。 數組中某些數字是重復的,但不知道有幾個數字是重復的。也不知道每個數字重復幾次。請找出數組中任意一個重復的數字。 例如,如果輸入長度為7的數組{2,3,1,0,2,5,3},那麽對應的輸出是第一個重復的數字2。 方法一:雙for 時間復雜度:o(n^2) 空間復雜度o(1) 時間復雜度太高了,盡量避免啊public class Solution { // Parameters: // numbers: an array of integers// length: the length of array numbers // duplication: (Output) the duplicated number in the array number,length of duplication array is 1,so using duplication[0] = ? in implementation; // Here duplication like pointor in C/C++, duplication[0] equal *duplication in C/C++// 這裏要特別註意~返回任意重復的一個,賦值duplication[0] // Return value: true if the input is valid, and there are some duplications in the array number // otherwise false public boolean duplicate(int numbers[],int length,int [] duplication) { if(length<2) return false; for(int i=0;i<length;i++){ for(int j=i+1;j<length;j++){ if(numbers[i]==numbers[j]){ duplication[0]=numbers[i]; return true; } } } duplication[0]=-1; return false; } }
方法二:加一個boolean 量標誌位
public class Solution { // Parameters: // numbers: an array of integers // length: the length of array numbers // duplication: (Output) the duplicated number in the array number,length of duplication array is 1,so using duplication[0] = ? in implementation; // Here duplication like pointor in C/C++, duplication[0] equal *duplication in C/C++ // 這裏要特別註意~返回任意重復的一個,賦值duplication[0] // Return value: true if the input is valid, and there are some duplications in the array number // otherwise false public boolean duplicate(int numbers[],int length,int [] duplication) { if(length<2) return false; boolean [] k=new boolean[length]; for(int i=0;i<length;i++){ if(k[numbers[i]]==true){ duplication[0]=numbers[i]; return true; } k[numbers[i]]=true; } return false; } }
數組中重復的數字(劍指offer)