剣指offer 2(3)配列の重複数

9537 ワード

package         ;

/**
 *       n           0~n-1   。
 *            。             ,
 *              。               。
 *   ,       7   {2,3,1,0,2,5,3},             2  3。
 */

/**
 *   :1.    map      ,            
 * 2.     n   ,         0~n-1                       {0,1,2,...,n-1}
 *                     ,              ,                ,      ,    
 * 3.  :  0        0    0       
 *         array[0]  2   2   array[2]      2 array[2] 1                {1,3,2,0,2,5,3}
 *               {3,1,2,0,2,5,3}
 *       {0,1,2,3,2,5,3}
 *           array[4]  2   array[2]       2          
 *
 */
public class ArrayCommon {

    public static int duplicate(int[] array) {
        //        
        int temp;
        //    
        if (array.length == 0){
            return -1;
        }

        //          
        for(int i=0;i<array.length;i++)
        {
            if(array[i]<0||array[i]>array.length-1)
            {
                return -3;
            }
        }
        //    
        for (int i = 0; i < array.length; i++) {

            if (array[i] != i) {
                if (array[i] == array[array[i]]){

                    return array[i];
                }
                temp = array[i];
                array[i] = array[temp];
                array[temp] = temp;
            }
        }
        return -1;
    }

    public static void main(String[] args) {
        int[] array = new int[]{2,3,1,0,2,5,3};
        int num = duplicate(array);
        if (num == -1) {
            System.out.println("         ");
        }
        else if (num == -3) {
            System.out.println("   0~n-1");
        }
        else{
            System.out.println("         "+num);
        }
    }
}