1010// 令 nums[j] = nums[j] - 2
1111// 如果两个数组中每个元素出现的频率相等,我们称两个数组是 相似 的
1212// 请你返回将 nums 变得与 target 相似的最少操作次数
13- // 测试数据保证 nums 一定能变得与 target 相似
13+ // 测试数据保证nums一定能变得与target相似
1414// 测试链接 : https://leetcode.cn/problems/minimum-number-of-operations-to-make-arrays-similar/
1515public class Code03_MinimumOperationsMakeSimilar {
1616
1717 public static long makeSimilar (int [] nums , int [] target ) {
1818 int n = nums .length ;
19- int oddSize = split (nums );
20- split (target );
19+ int oddSize = split (nums , n );
20+ split (target , n );
2121 Arrays .sort (nums , 0 , oddSize );
2222 Arrays .sort (nums , oddSize , n );
2323 Arrays .sort (target , 0 , oddSize );
@@ -26,17 +26,19 @@ public static long makeSimilar(int[] nums, int[] target) {
2626 for (int i = 0 ; i < n ; i ++) {
2727 ans += Math .abs ((long ) nums [i ] - target [i ]);
2828 }
29- return ans >> 2 ;
29+ return ans / 4 ;
3030 }
3131
32- public static int split (int [] arr ) {
33- int line = 0 ;
34- for (int i = 0 ; i < arr .length ; i ++) {
35- if ((arr [i ] & 1 ) != 0 ) {
36- swap (arr , i , line ++);
32+ // 把数组分割成左部分全是奇数,右部分全是偶数
33+ // 返回左部分的长度
34+ public static int split (int [] arr , int n ) {
35+ int oddSize = 0 ;
36+ for (int i = 0 ; i < n ; i ++) {
37+ if ((arr [i ] & 1 ) == 1 ) {
38+ swap (arr , i , oddSize ++);
3739 }
3840 }
39- return line ;
41+ return oddSize ;
4042 }
4143
4244 public static void swap (int [] arr , int i , int j ) {
0 commit comments