题解 | #数组中重复的数字#

数组中重复的数字

http://www.nowcoder.com/practice/6fe361ede7e54db1b84adc81d09d8524

数组中重复数字

思路:数组中元素范围为0~n-1,所以如果没有重复元素,每个位置的元素都可以等于下标(即numbers[i] == i). 所以可以用交换操作将值为k的元素移到numbers[k],每次移动时比较之前的numbers[k]是否等于k,若等于,则k重复;反之,则进行swap。反复比较、交换,从而找到了数组中重复的元素。

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param numbers int整型一维数组 
     * @return int整型
     */
    public int duplicate (int[] numbers) {
        // write code here
        for(int i = 0; i < numbers.length; i++){
            while(numbers[i] != i){
                int k = numbers[i];
                if(numbers[k] == k){
                    return k;
                }else{
                    swap(numbers, i, k);
                }
            }
        }
        return -1;
    }
    
    public void swap(int[] nums, int a, int b){
        int tmp = nums[a];
        nums[a] = nums[b];
        nums[b] = tmp;
    }
}
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务