package 剑指Offer.数组中重复的数字; import java.util.HashSet; import java.util.Set; /** * @program:多线程和IO * @descripton: * @author:ZhengCheng * @create:2021/9/17-19:00 **/ public class FindRepeatNum { public static void main(String[] args) { int[] a = new int[1000001]; for (int i = 0; i < 1000000; i++) { a[i] = i; } a[1000000] = 999999; long l1 = System.currentTimeMillis(); new FindRepeatNum().methodSet(a); long l2 = System.currentTimeMillis(); new FindRepeatNum().methodArr(a); long l3 = System.currentTimeMillis(); System.out.println(l2-l1); System.out.println(l3-l2); } //使用集合的方式 private int methodSet(int[] arr){ Set<Integer> set = new HashSet<>(); for (int i = 0; i < arr.length; i++) { if (!set.add(arr[i])){ return arr[i]; } } return -1; } //由于上述方法使用了一个Set,导致空间复杂度提升,使用arr原位 private int methodArr(int[] arr){ for (int i = 0; i < arr.length; i++) { if (arr[i] == i){ continue; }else if (arr[arr[i]] != arr[i]){ int temp = arr[i]; arr[i] = arr[temp]; arr[temp] = temp; }else { return arr[i]; } } return -1; } }
剑指offer-数组中重复的数字(哈希表,原地交换)
最新推荐文章于 2024-07-14 14:59:27 发布