1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
| import java.util.Arrays; import java.util.HashSet; import java.util.Set;
public class _16_21交换和 {
public int[] findSwapValues_area2time(int[] array1, int[] array2) { int sum1 = 0, sum2 = 0; Set<Integer> container = new HashSet<>(); for (int num : array1) sum1 += num; for (int num : array2) { container.add(num); sum2 += num; } int diff = sum1 - sum2; if (diff % 2 != 0) return new int[]{}; diff /= 2; for (int num : array1) { if (container.contains(num - diff)) { return new int[]{num, num - diff}; } } return new int[]{}; }
public int[] findSwapValues(int[] array1, int[] array2) { Arrays.sort(array1); Arrays.sort(array2); int sum1 = 0, sum2 = 0; for (int i : array1) sum1 += i; for (int i : array2) sum2 += i; int diff = sum1 - sum2; if (diff % 2 != 0) return new int[]{}; int target = Math.abs(diff) / 2;
int idx1 = 0, idx2 = 0; while (idx1 < array1.length && idx2 < array2.length) { if (array1[idx1] > array2[idx2] + target) { idx2++; } else if (array1[idx1] == array2[idx2] + target) { return new int[]{array1[idx1], array2[idx2]}; } else { idx1++; } } idx1 = 0; idx2 = 0; while (idx1 < array1.length && idx2 < array2.length) { if (array1[idx1] + target > array2[idx2]) { idx2++; } else if (array1[idx1] + target == array2[idx2]) { return new int[]{array1[idx1], array2[idx2]}; } else { idx1++; } } return new int[]{}; }
public static void main(String[] args) { _16_21交换和 test = new _16_21交换和(); int[] array1 = {4, 1, 2, 1, 1, 2}; int[] array2 = {3, 6, 3, 3};
System.out.println(Arrays.toString(test.findSwapValues(array1, array2))); } }
|