剑指Offer 03.数组中重复的数字

package Offer;

import sun.awt.image.IntegerComponentRaster;

import javax.jnlp.IntegrationService;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

/*找出任意一个重复的数字*/
public class Test1 {
    //方法一
    //从头到尾扫描全表,时间复杂度为O(n),使用了哈希表,空间复杂度为O(n)
    /*
    public int findRepeatNumber(int[] nums) {
        HashMap<Integer, Integer> map = new HashMap<>();

        for (int i = 0; i < nums.length; i++) {
            //判断是否出现
            if (!map.containsKey(nums[i])) {
                map.put(nums[i], 1);
            } else {
                int tmp = map.get(nums[i]);
                map.put(nums[i], tmp+1);
            }
        }

        int result = -1;

        //map的遍历一
        for (Integer key: map.keySet()) {
            if (map.get(key) > 1) {
                result = key;
                break;
            }
        }

        //map的遍历二
        //使用iter迭代器
        Iterator it = map.keySet().iterator();
        while (it.hasNext()) {
            Integer key = (Integer)it.next();
            if (map.get(key) > 1) {
                result = key;
                break;
            }
        }

        //map的遍历三
        //使用Entry内部类来表示映射
        for (Map.Entry<Integer, Integer> entry: map.entrySet()) {
            if (entry.getValue() > 1) {
                result = entry.getKey();
                break;
            }
        }
        return result;
    }*/

    //比较交换的方法
    //时间复杂度O(n),空间复杂度O(1)
    public int findRepeatNumber(int[] nums) {
        if (nums == null || nums.length < 0) {
            return -1;
        }

        for (int i = 0; i < nums.length; i++) {
            while (i != nums[i]) {
                if (nums[i] == nums[nums[i]]) {
                    return nums[i];
                } else {
                    swap(nums, i, nums[i]);
                }
            }
        }
        return -1;
    }

    //交换数组中的两个数字
    public void swap(int[] nums, int index_1, int index_2) {
        int tmp = nums[index_1];
        nums[index_1] = nums[index_2];
        nums[index_2] = tmp;
    }
}

 

posted @ 2021-03-01 10:55  Peterxiazhen  阅读(53)  评论(0编辑  收藏  举报