当前位置: 首页 > news >正文

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

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==nums.lengthn == nums.lengthn==nums.length
  • 1<=nums.length<=1051 <= nums.length <= 10^51<=nums.length<=105
  • −109<=nums[i]<=109- 10^9 <= nums[i] <= 10^9109<=nums[i]<=109

思路:

每次可以对一个数组元素加一或者减一,求最小的改变次数。

这是个典型的相遇问题,移动距离最小的方式是所有元素都移动到中位数。理由如下:

  • m中位数abm 两边的两个元素,且 b > a
  • 要使 ab 相等,它们总共移动的次数为 b - a,这个值等于 (b - m) + (m - a)
  • 也就是把这两个数移动到中位数的移动次数

设数组长度为 N,则可以找到 N/2ab 的组合,使它们都移动到 m 的位置。

代码:(Java、C++)

Java

import java.util.Arrays;public class MinMoves2 {public static void main(String[] args) {// TODO Auto-generated method stubint[] nums = {1, 10, 2, 9};System.out.println(minMoves2(nums));}public static int minMoves2(int[] nums) {Arrays.sort(nums);int l = 0, h = nums.length - 1;int moves = 0;while(l < h) {moves += nums[h--] - nums[l++];}return moves;}
}

C++

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;class MinMoves2 {
public:int minMoves2(vector<int>& nums) {sort(nums.begin(), nums.end());int l = 0, h = nums.size() - 1;int moves = 0;while (l < h) {moves += nums[h--] - nums[l++];}return moves;}
};int main() {MinMoves2 m;vector<int> nums = {1,10,2,9 };cout << m.minMoves2(nums) << endl;system("pause");return 0;
}

运行结果:

在这里插入图片描述

复杂度分析:

  • 时间复杂度O(nlogn)O(nlogn)O(nlogn),其中 n 是数组 nums 的长度。排序需要 O(nlog⁡n)O(nlog⁡n)O(nlogn)的时间。
  • 空间复杂度O(logn)O(logn)O(logn)。排序需要 O(log⁡n)O(log⁡n)O(logn)的递归栈空间。

题目来源:力扣。

注:仅供学习参考, 如有不足,欢迎指正!

相关文章:

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

462. 最小操作次数使数组元素相等 II 给你一个长度为 n 的整数数组 nums &#xff0c;返回使所有数组元素相等需要的最小操作数。 在一次操作中&#xff0c;你可以使数组中的一个元素加 1 或者减 1 。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&#xff1a;2 …...

对数据库的库及表的操作

全篇在MySQL操作下完成 在此之前&#xff0c;先介绍一下&#xff0c;字段、列类型及属性。 一、什么是字段、列类型、属性 (1)字段&#xff0c;一张表中列的名称&#xff1b;列类型&#xff0c;该列存储数据的类型&#xff1b;属性&#xff0c;描述列类型的特征。 …...

final类又没实现接口应该用哪一种代理, jdk动态代理还是cglib代理

jdk动态代理还是cglib代理&#x1f9d9;jdk动态代理和cglib代理的示例JDK动态代理原理CGLIB代理final类又没实现接口应该用哪一种代理, jdk动态代理还是cglib代理滚滚长江东逝水&#xff0c;浪花淘尽英雄。——唐代杨炯《临江仙》 jdk动态代理和cglib代理的示例 以下是一个使用…...

使用StaMPS_Visualizer

0 前言 StaMPS-Visualizer &#xff1a;由thho开发的用于可视化由StaMPS / MTI处理的DInSAR结果。 github地址&#xff1a;StaMPS-Visualizer 使用StaMPS_Visualizer需要配置好StaMPS&#xff0c;并安装好R和Rstudio Ubuntu中安装StaMPS StaMPS-Visualizer 安装步骤–在linux…...

高并发-高性能-高可用-结论版

文章目录上万的并发需要多少台web服务器一般单机能处理200请求&#xff0c;为何redis单机却能处理上万请求单线程每秒能处理&#xff08;发送/响应&#xff09;的http请求数三高的定义高并发的解决方案高性能的解决方案高可用的解决方案参考文章上万的并发需要多少台web服务器 …...

数智转型助力建筑业全产业链升级,你了解多少?

关于数智转型&#xff0c;指的是基于数字化技术和数据驱动的思维方式&#xff0c;将企业的管理、业务和服务进行全面的升级和改造&#xff0c;从而帮助实现企业的数字化转型和升级。通过数字技术和数据分析来提高企业的效率、创新能力和竞争力&#xff0c;进一步提高企业的市场…...

Python网络设备脚本中经常使用的connecthandler和telnetlib是什么意思?

你好&#xff0c;这里是网络技术联盟站。 在昨天的文章中&#xff0c;有小伙伴提到对这两天瑞哥提供的Python脚本中涉及的connecthandler和telnetlib两个模块不是太了解&#xff0c;想要学习一下&#xff1a; 今天瑞哥就安排上&#xff01; 其实这两个模块是Python与网络设备…...

你真的会写 git commit message 吗?

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;蚂蚁集团高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《EffectiveJava》独家解析》专栏作者。 热门文章推荐…...

ISO文件内添加kickstart完成自动安装

目录 将待制作的centos iso文件挂载到/mnt/目录 将/mnt/下的所有文件复制到新的目录/tmp/mycentos 创建kickstart文件 修改启动文件 重新制作ISO文件 制作完成 kickstart可以实现根据配置自动安装操作系统&#xff0c;本文主要讲解如何让机器读取到iso文件后自动完成操作…...

SpringBoot 整合RabbitMq 自定义消息监听容器来实现消息批量处理

SpringBoot 整合RabbitMq 自定义消息监听容器来实现消息批量处理前言添加依赖配置文件编写监听器创建SimpleRabbitListenerContainerFactory发送消息前言 RabbitMQ是一种常用的消息队列&#xff0c;Spring Boot对其进行了深度的整合&#xff0c;可以快速地实现消息的发送和接收…...

jquery基础之操作节点对象

jquery操作节点&#xff08;元素&#xff09;对象 捕获-DOM操作&#xff0c;获取内容&#xff0c;值 获取内容&#xff1a;1.text&#xff08;&#xff09;获取元素的文本内容 2.html&#xff08;&#xff09;获取元素的文档内容 …...

对于Java的深入理解及其特点--面试

前言 计算机语言千千万&#xff0c;每一种语言都有其自己的特点、擅长的领域。在学习了Java之后才对Java有了进一步的理解。 面试问一&#xff1a; 你是如何理解Java这门语言的&#xff1f; 这里我们应该从下面几个点去总结 1、Java语言具有的属性 2、他的特点在哪 Java语…...

Linux GPSD的使用

目录 1: GPSD 运行状态查看 2:停止GPSD 服务 3: GPSD运行输出(协议的识别) 4:开启的服务...

ArrayList无参构造添加元素源码解读

一、ArrayList无参构造add方法源码阅读 Test//无参构造源码阅读 public void testArrayListNoConstructorAdd(){ArrayList<Integer> arrayList new ArrayList<>();ArrayList<Integer> list new ArrayList<>();arrayList.add(1);arrayList.add(12);a…...

手写简易 Spring(二)

文章目录手写简易 Spring&#xff08;二&#xff09;1. 扩展 BeanFactory 接口2. 实现资源加载器&#xff0c;从 Spring.xml 解析和注册 Bean 对象1. 核心实现类 XmlBeanDefinitionReader3. 实现应用上下文&#xff0c;自动识别、资源加载、扩展机制1. 应用上下文2. 核心实现类…...

排列问题DFS入门

1、题目描述&#xff08;全排列&#xff09; 输入一个正整数n&#xff0c;输出1~n的全排列。 输入格式 一个正整数n。 输出格式 所有1~n的全排列&#xff0c;每个排列占一行。 样例输入 3 样例输出 1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1 算法思路 题目要求输出n的全…...

【每日一题Day159】LC1638统计只差一个字符的子串数目 | 枚举

统计只差一个字符的子串数目【LC1638】 给你两个字符串 s 和 t &#xff0c;请你找出 s 中的非空子串的数目&#xff0c;这些子串满足替换 一个不同字符 以后&#xff0c;是 t 串的子串。换言之&#xff0c;请你找到 s 和 t 串中 恰好 只有一个字符不同的子字符串对的数目。 比…...

【07 Metadata and VendorTag】

1. Metadata结构及分类 一个 metadata 通过tag,value及 type 来描述。不同的 metadata 分成三类 controls,dynamic 及 static 2. MTK Metadata IMetadata Mtk metadata containerIMetadataConverter Provide mutual conversion for Android camera_metadata and MTK Imetada…...

Golang中Model的使用

导语我们都知道在Golang中我们一般都是设置GOPATH目录&#xff0c;这个目录主要存放我们的第三方包&#xff0c;这个方式一直不是很方便&#xff0c;今天给大家介绍Go 1.11版本中推出的GoModul使用方法&#xff0c;学过java的同学&#xff0c;可能对maven包有所了解&#xff0c…...

交友项目【基础环境搭建】

目录 1&#xff1a;交友项目架构介绍 1.1&#xff1a;前后端分离的概述 1.2&#xff1a;YAPI介绍&#xff08;虚拟机中已经配好&#xff09; 基本信息 使用 安装跨域拓展&#xff08;浏览器上安装跨域处理插件&#xff09; 2&#xff1a;虚拟机工具项目搭建 2.1&#xff1…...

TL494电源芯片避坑指南:常见设计误区与调试技巧

TL494电源芯片避坑指南&#xff1a;常见设计误区与调试技巧 在电源设计领域&#xff0c;TL494作为一款经典PWM控制芯片&#xff0c;凭借其稳定性和灵活性赢得了工程师的青睐。但就像任何工具一样&#xff0c;只有真正理解它的特性才能发挥最大价值。本文将带您深入TL494的设计细…...

Mac用户福音:Qwen3-TTS声音克隆在ComfyUI上的M芯片优化方案

Mac用户福音&#xff1a;Qwen3-TTS声音克隆在ComfyUI上的M芯片优化方案 1. 为什么Mac用户需要特别优化方案 苹果M系列芯片凭借其出色的能效比和统一内存架构&#xff0c;已经成为许多创意工作者的首选。然而&#xff0c;在运行AI模型时&#xff0c;特别是像Qwen3-TTS这样的语…...

Chandra OCR多平台部署指南:Windows WSL2/Mac Metal/Linux Docker全搞定

Chandra OCR多平台部署指南&#xff1a;Windows WSL2/Mac Metal/Linux Docker全搞定 1. Chandra OCR核心能力解析 Chandra是Datalab.to在2025年10月开源的布局感知OCR模型&#xff0c;与传统OCR工具最大的区别在于它能完整保留文档的排版结构信息。想象一下&#xff1a;当你扫…...

李慕婉-仙逆-造相Z-Turbo AI核心原理科普:如何用Transformer理解并生成人类语言

李慕婉-仙逆-造相Z-Turbo AI核心原理科普&#xff1a;如何用Transformer理解并生成人类语言 你有没有想过&#xff0c;当你和“李慕婉-仙逆-造相Z-Turbo”这样的AI模型对话时&#xff0c;它到底是怎么“听懂”你的话&#xff0c;又“想”出那些回答的&#xff1f;它不像我们人…...

通义千问3-VL-Reranker-8B保姆级部署教程:5分钟搞定Nginx反向代理与HTTPS配置

通义千问3-VL-Reranker-8B保姆级部署教程&#xff1a;5分钟搞定Nginx反向代理与HTTPS配置 1. 为什么需要反向代理与HTTPS 当你成功在本地运行通义千问3-VL-Reranker-8B服务后&#xff0c;默认只能通过 http://localhost:7860 访问。这种配置存在三个明显问题&#xff1a; 安…...

8-Bit美学不妥协性能|像素剧本圣殿UI渲染与LLM推理资源隔离方案

8-Bit美学不妥协性能&#xff5c;像素剧本圣殿UI渲染与LLM推理资源隔离方案 1. 项目概述 像素剧本圣殿&#xff08;Pixel Script Temple&#xff09;是一款专为剧本创作者设计的AI辅助工具&#xff0c;基于Qwen2.5-14B-Instruct大模型深度微调开发。它将高性能AI推理能力与独…...

重组胶原蛋白 | 可溶性蛋白 | 蛋白纯化 | 原核与真核系统

在生命科学研究中&#xff0c;重组胶原蛋白&#xff08;Recombinant Collagen&#xff09;作为一种关键的生物大分子&#xff0c;因其独特的结构特点和在细胞外基质研究中的重要性而被广泛关注。一、胶原蛋白分子构成与分类胶原蛋白&#xff08;Collagen&#xff09;是动物体内…...

【生产环境禁用警告】:这6个Python内存反模式正悄悄拖垮你的K8s Pod——附自动检测脚本

第一章&#xff1a;Python智能体内存管理策略生产环境部署在高并发、长生命周期的Python智能体服务中&#xff0c;内存管理直接影响系统稳定性与响应延迟。默认的CPython引用计数循环垃圾回收&#xff08;GC&#xff09;机制在动态对象频繁创建销毁的场景下易引发内存抖动和不可…...

Graphormer实战教程:基于ogb库加载PCQM4M数据微调模型示例

Graphormer实战教程&#xff1a;基于ogb库加载PCQM4M数据微调模型示例 1. 引言 Graphormer是一种创新的分子属性预测模型&#xff0c;采用纯Transformer架构的图神经网络设计。它专门针对分子图&#xff08;原子-键结构&#xff09;的全局结构建模与属性预测任务&#xff0c;…...

从原理到代码:深入解析UniFormer的多头关系聚合器(MHRA)设计

从原理到代码&#xff1a;深入解析UniFormer的多头关系聚合器(MHRA)设计 视频理解领域近年来经历了从3D卷积网络到视觉Transformer的范式转变&#xff0c;但两者在时空特征提取上各有限制。3D CNN擅长捕捉局部时空特征却受限于固定感受野&#xff0c;而视觉Transformer虽能建模…...