Less than 1 minute
// 2602. 使数组元素全部相等的最少操作次数
class Solution {
public List<Long> minOperations(int[] nums, int[] queries) {
Arrays.sort(nums); // 排序,为了二分查找
int n = nums.length;
long[] sums = new long[n + 1];
sums[0] = 0;
for (int i = 0; i < nums.length; i++) {
sums[i + 1] = nums[i] + sums[i];
}
List<Long> result = new ArrayList<>();
for (int query : queries) {
int index = binarySearch(nums, query);
long left = (long) index * query - sums[index];
long right = sums[n] - sums[index] - (long) (n - index) * query;
result.add(left + right);
}
return result;
}
// leftmost i版
public int binarySearch(int[] nums, int target) {
int i = 0, j = nums.length - 1;
while (i <= j) {
int m = (i + j) >>> 1;
if (target <= nums[m]) {
j = m - 1;
} else {
i = m + 1;
}
}
return i;
}
}