【LeetCode每日一题】——462.最小操作次数使数组元素相等 II

文章目录

  • 一【题目类别】
  • 二【题目难度】
  • 三【题目编号】
  • 四【题目描述】
  • 五【题目示例】
  • 六【解题思路】
  • 七【题目提示】
  • 八【时间频度】
  • 九【代码实现】
  • 十【提交结果】

一【题目类别】

  • 排序

二【题目难度】

  • 中等

三【题目编号】

  • 462.最小操作次数使数组元素相等 II

四【题目描述】

  • 给你一个长度为 n 的整数数组 nums ,返回使所有数组元素相等需要的最小操作数。
  • 在一次操作中,你可以使数组中的一个元素加 1 或者减 1 。

五【题目示例】

  • 示例 1:

    • 输入:nums = [1,2,3]
    • 输出:2
    • 解释:只需要两次操作(每次操作指南使一个元素加 1 或减 1):[1,2,3] => [2,2,3] => [2,2,2]
  • 示例 2:

    • 输入:nums = [1,10,2,9]
    • 输出:16

六【解题思路】

  • 可以发现当我们取中位数作为基准值时,其他元素都调整为基准值,这时所需要的操作次数最少
  • 所以找到基准值后,只需要计算其他值调整为基准值需要的操作次数,将其累加
  • 最后返回结果即可

七【题目提示】

  • n = = n u m s . l e n g t h n == nums.length n==nums.length
  • 1 < = n u m s . l e n g t h < = 1 0 5 1 <= nums.length <= 10^5 1<=nums.length<=105
  • − 1 0 9 < = n u m s [ i ] < = 1 0 9 -10^9 <= nums[i] <= 10^9 109<=nums[i]<=109

八【时间频度】

  • 时间复杂度: O ( n l o g n ) O(nlogn) O(nlogn),其中 n n n为数组的长度
  • 空间复杂度: O ( 1 ) O(1) O(1)

九【代码实现】

  1. Java语言版
package Sort;

import java.util.Arrays;

/**
 * @Author: IronmanJay
 * @Description: 462.最小操作次数使数组元素相等 II
 * @CreateTime: 2022-11-17  09:29
 */
public class p462_MinimumMovesToEqualArrayElementsII {

    public static void main(String[] args) {
        int[] nums = {1, 2, 3};
        int res = minMoves2(nums);
        System.out.println("res = " + res);
    }

    public static int minMoves2(int[] nums) {
        Arrays.sort(nums);
        int len = nums.length;
        int mid = nums[len / 2];
        int res = 0;
        for (int i = 0; i < len; i++) {
            res += Math.abs(nums[i] - mid);
        }
        return res;
    }

}
  1. C语言版
#include

int compare_p462_MinimumMovesToEqualArrayElementsII(const void *a, const void *b)
{
	return *(int *)a - *(int *)b;
}

int minMoves2(int* nums, int numsSize)
{
	qsort(nums, numsSize, sizeof(int), compare_p462_MinimumMovesToEqualArrayElementsII);
	int mid = nums[numsSize / 2];
	int res = 0;
	for (int i = 0; i < numsSize; i++)
	{
		res += fabs(nums[i] - mid);
	}
	return res;
}

/*主函数省略*/

十【提交结果】

  1. Java语言版
    在这里插入图片描述

  2. C语言版
    【LeetCode每日一题】——462.最小操作次数使数组元素相等 II_第1张图片

你可能感兴趣的:(LeetCode,leetcode,算法,数据结构,排序算法,数组)