查找重複數

劍指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))

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章