劍指offer-面試題3
java
package offer;
/*
* description:
* find the duplicated number in the array
* there are n numbers in the array range from 0 to n-1.
* There are some duplicated numbers in the array, find alternative one duplicated number
*
* in this program, I find all the duplicated number
*/
public class num3_duplicated_number {
public static int[] duplication(int[] arr)
{
int count=0;
int[] dunum={-1,-1,-1,-1,-1,-1,-1};
if(arr==null||arr.length==0)
{
return dunum;
}
for(int i=0;i<arr.length;i++)
{
if(arr[i]>arr.length-1||arr[i]<0)
{
return dunum;
}
}
for(int i=0;i<arr.length;i++)
{
while(arr[i]!=i)
{
if(arr[i]==arr[arr[i]])
{
dunum[count]= arr[i];
count++;
break;
}
int temp=arr[arr[i]];// the order is important which is relative to swap times
arr[arr[i]]=arr[i];
arr[i]=temp;
}
}
return dunum;
}
public static void main(String[] args)
{
int[] arr={2,3,1,0,2,5,3};
int[] ans =duplication(arr);
for(int i=0;i<ans.length;i++)
{
if(ans[i]!=-1)
{
System.out.println(ans[i]);
}
}
}
}
python
def duplication(arr):
if arr==[] or len(arr)==0:
return -1
for i in range(len(arr)):
if arr[i]<0 or arr[i]>=len(arr):
return -1
for i in range(len(arr)):
while arr[i] != i:
if arr[i] == arr[arr[i]]:
return arr[i]
# arr[i],arr[arr[i]] = arr[arr[i]],arr[i]
temp = arr[arr[i]] #the order of swap is important in this problem
arr[arr[i]]=arr[i]
arr[i]=temp
print(arr)
return -1
if __name__ == '__main__':
arr = [2, 3, 1, 0, 2, 5, 3]
print(duplication(arr))