当前位置: 首页 > 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…...

AI智能体记忆系统设计:从RAG到长期记忆的工程实践

1. 项目概述&#xff1a;从“记忆”到“智能”的跨越在AI智能体&#xff08;Agent&#xff09;的开发浪潮中&#xff0c;我们常常面临一个核心挑战&#xff1a;如何让智能体在复杂的、多轮次的交互中&#xff0c;表现得像一个真正有“记忆”和“经验”的专家&#xff1f;传统的…...

Otter多模态大模型实战:从Flamingo架构到指令调优与部署优化

1. 项目概述&#xff1a;一个能“看懂”世界的多模态大模型最近在折腾多模态大模型&#xff08;Multimodal Large Language Models, MLLMs&#xff09;的朋友&#xff0c;应该对 Otter 这个名字不陌生。它不是一个独立的产品&#xff0c;而是一个开源的研究项目&#xff0c;全称…...

毫米波ISAC技术:车联网中的感知与通信融合方案

1. 毫米波ISAC系统概述在智能交通系统快速发展的今天&#xff0c;毫米波集成感知与通信(ISAC)技术正成为解决车联网(V2X)需求的关键方案。这项技术的核心创新点在于&#xff0c;它巧妙地将雷达感知和无线通信两大功能整合到同一硬件平台上&#xff0c;通过共享60GHz毫米波频段资…...

开源机械臂技能化控制:从硬件驱动到应用集成的实践指南

1. 项目概述&#xff1a;从开源机械臂到技能控制台最近在机器人控制领域&#xff0c;一个名为esmatcm/openclaw-control-console-skill的项目引起了我的注意。乍一看&#xff0c;这像是一个围绕开源机械臂OpenClaw的控制台技能项目。作为一名长期混迹于硬件开源社区和机器人应用…...

Hermes Agent 连接 Taotoken 自定义供应商,完成环境变量配置

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 Hermes Agent 连接 Taotoken 自定义供应商&#xff0c;完成环境变量配置 基础教程类&#xff0c;指导用户在使用 Hermes Agent 时&…...

多机驱动振动系统同步控制理论【附模型】

✨ 长期致力于振动机械、自同步、控制同步、GA-BP PID、定速比研究工作&#xff0c;擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流&#xff0c;点击《获取方式》 &#xff08;1&#xff09;GA-BP神经网络PID控制器设计及其参数自…...

深度学习训练理论:初始化与梯度消失

深度学习训练理论&#xff1a;初始化与梯度消失 1. 技术分析 1.1 训练挑战概述 深度学习训练面临多种挑战&#xff1a; 训练挑战梯度消失: 梯度趋近于0梯度爆炸: 梯度过大参数初始化: 权重初始化影响激活函数选择: 影响梯度流动1.2 梯度消失原因 原因机制影响激活函数sigmoid/t…...

AI与人类共创:从替代焦虑到协作闭环

GPT-Image 2 与人类创造力的共生&#xff1a;从“替代焦虑”到“协作闭环”&#xff08;2026 研究视角与可落地实践&#xff09;当 GPT-Image 2 这样的多模态生成/理解模型进入创作流程后&#xff0c;“竞争还是协作”立刻变成一个绕不开的讨论。直觉上&#xff0c;大家会把它理…...

ModbusTool:工业自动化通信调试的技术实现与实践指南

ModbusTool&#xff1a;工业自动化通信调试的技术实现与实践指南 【免费下载链接】ModbusTool A modbus master and slave test tool with import and export functionality, supports TCP, UDP and RTU. 项目地址: https://gitcode.com/gh_mirrors/mo/ModbusTool 在工业…...

Point Transformer V3 牙齿语义分割测试结果为0问题:完整调试与修复方案

Point Transformer V3 牙齿语义分割测试结果为0问题:完整调试与修复方案 摘要 Point Transformer V3(PTv3)是CVPR 2024发布的高效点云处理模型,在语义分割任务中表现出色。然而,在16类牙齿语义分割任务的测试阶段,模型输出全部为0的问题却常常困扰开发者。本文将从数据…...