给定一个长度为 n 的非空整数数组,找到让数组所有元素相等的最小移动次数。每次移动可以使 n - 1 个元素增加 1。

示例:

输入:
[,,] 输出: 解释:
只需要3次移动(注意每次移动会增加两个元素的值): [,,] => [,,] => [,,] => [,,]

自我思考:
观察规律,移动次数是数组内最大值减去最小值,然后生成新数组后继续用最大值减最小值,直到这个差为0,每次的差的和就是移动次数
代码实现如下

 import java.io.IOException;
import java.util.Scanner; public class MainClass {
public static void main(String[] args) throws IOException{
Scanner input = new Scanner(System.in);
System.out.println("请输入数组,元素间以逗号隔开:");
int[] nums=stringToArray(input.nextLine());
Solution getMoves=new Solution();
int moves=getMoves.minMoves(nums);
System.out.println("最少移动次数为:");
System.out.println(moves);
}
public static int[] stringToArray(String str){
String[] strArr= str.split(",");
int[] arr=new int[strArr.length];
for(int i=0;i<strArr.length;i++){
arr[i]=Integer.parseInt(strArr[i].trim());
}
return arr;
}
} class Solution {
public int minMoves(int[] nums) {
int minMoves=move(nums,0); return minMoves;
} public int[] subMaxMin(int[] nums){
int max=0,min=0;
for(int i=1;i<nums.length;i++){
if(nums[max]<nums[i]){
max=i;
}
if(nums[min]>nums[i]){
min=i;
}
}
int[] maxAndMin={max,min};
return maxAndMin;
} public int move(int[] nums,int sumMove){
int[] maxAndMin=subMaxMin(nums);
int moves=nums[maxAndMin[0]]-nums[maxAndMin[1]];
if(moves!=0){
sumMove+=moves;
for(int i=0;i<nums.length;i++){
if(i!=maxAndMin[0]){
nums[i]+=moves;
}
}
return move(nums,sumMove);
}else{
return sumMove;
}
}
}

本实现在leetcode提交后,因为超时,被拒,虽然在myeclipes中可以快速运行,但在线调试显示发费时间极高,[1,2,3]花费时间在120ms左右。
百度后发现: 本算法的核心是移动次数是数组内其他元素减去最小值的和,所以。。。。

 class Solution {
public int minMoves(int[] nums) {
int sum=0,moves,min=nums[0];
for(int i=0;i<nums.length;i++){
sum+=nums[i];
if(nums[i]<min){
min=nums[i];
}
}
moves=sum-min*nums.length;
return moves;
}
}

抽自己几个耳刮子才行?!!


												

LeetCode#453 最小移动次数使数组元素相等的更多相关文章

  1. LeetCode 453. 最小移动次数使数组元素相等(Minimum Moves to Equal Array Elements) 47

    453. 最小移动次数使数组元素相等 453. Minimum Moves to Equal Array Elements 题目描述 给定一个长度为 n 的非空整数数组,找到让数组所有元素相等的最小移 ...

  2. Java实现 LeetCode 453 最小移动次数使数组元素相等

    453. 最小移动次数使数组元素相等 给定一个长度为 n 的非空整数数组,找到让数组所有元素相等的最小移动次数.每次移动可以使 n - 1 个元素增加 1. 示例: 输入: [1,2,3] 输出: 3 ...

  3. 力扣(LeetCode)453. 最小移动次数使数组元素相等

    给定一个长度为 n 的非空整数数组,找到让数组所有元素相等的最小移动次数.每次移动可以使 n - 1 个元素增加 1. 示例: 输入: [1,2,3] 输出: 3 解释: 只需要3次移动(注意每次移动 ...

  4. Leetcode 462.最少移动次数使数组元素相等

    最少移动次数使数组元素相等 给定一个非空整数数组,找到使所有数组元素相等所需的最小移动数,其中每次移动可将选定的一个元素加1或减1. 您可以假设数组的长度最多为10000. 例如: 输入: [1,2, ...

  5. Java实现 LeetCode 462 最少移动次数使数组元素相等 II

    462. 最少移动次数使数组元素相等 II 给定一个非空整数数组,找到使所有数组元素相等所需的最小移动数,其中每次移动可将选定的一个元素加1或减1. 您可以假设数组的长度最多为10000. 例如: 输 ...

  6. 453 Minimum Moves to Equal Array Elements 最小移动次数使数组元素相等

    给定一个长度为 n 的非空整数数组,找到让数组所有元素相等的最小移动次数.每次移动可以使 n - 1 个元素增加 1.示例:输入:[1,2,3]输出:3解释:只需要3次移动(注意每次移动会增加两个元素 ...

  7. 【leetcode 简单】 第一百零九题 最小移动次数使数组元素相等

    给定一个长度为 n 的非空整数数组,找到让数组所有元素相等的最小移动次数.每次移动可以使 n - 1 个元素增加 1. 示例: 输入: [1,2,3] 输出: 3 解释: 只需要3次移动(注意每次移动 ...

  8. [Swift]LeetCode453. 最小移动次数使数组元素相等 | Minimum Moves to Equal Array Elements

    Given a non-empty integer array of size n, find the minimum number of moves required to make all arr ...

  9. Leetcode453.Minimum Moves to Equal Array Elements最小移动次数使数组元素相等

    给定一个长度为 n 的非空整数数组,找到让数组所有元素相等的最小移动次数.每次移动可以使 n - 1 个元素增加 1. 示例: 输入: [1,2,3] 输出: 3 解释: 只需要3次移动(注意每次移动 ...

随机推荐

  1. postgresql实现插入数据返回当前的主键ID

    <insert id="addUser" parameterType="com.liupan.user"> <selectKey keyPro ...

  2. ubuntu搭建mediawiki

    1.搭建lamp环境,lamp指的是: Linux+Apache+Mysql/MariaDB+Perl/PHP/Python (我们安装的是Linux+apache2+postgresql+php) ...

  3. 系统启动时,BIOS与影子内存_5

    问题:“当我们按下电源开关时,电源开始供电,芯片组撤去RESET信号,CPU马上就从地址FFFF0H处开始执行指令,这个地址在系统BIOS的地址范围内,无论是Award BIOS还是AMI BIOS, ...

  4. Spring事务管理的注解方式

    使用注解实现Spring的声明式事务管理,更加简单! 步骤: 1) 必须引入Aop相关的jar文件 2) bean.xml中指定注解方式实现声明式事务管理以及应用的事务管理器类 3)在需要添加事务控制 ...

  5. Ceres Solver: 高效的非线性优化库(二)实战篇

    Ceres Solver: 高效的非线性优化库(二)实战篇 接上篇: Ceres Solver: 高效的非线性优化库(一) 如何求导 Ceres Solver提供了一种自动求导的方案,上一篇我们已经看 ...

  6. C#数据库(MySQL)帮助类

    using MySql.Data.MySqlClient; using System; using System.Collections.Generic; using System.Configura ...

  7. java 多线程的经验总结

    什么是线程? 线程是操作系统所能运算调度的最小单元,包含于进程之中,作为进程的实际运作单位:线程与进程的区别,线程是进程的子集,一个进程可以有多个线程,每个线程并行执行不同的任务,不同的进程使用不同的 ...

  8. iOS解析新浪微博的@##以及URL链接并展示

    最近在做一个跟微博相关的应用.其中涉及到了对微博中@.##以及URL链接的解析与展示.分享一下个人处理的方式,希望对需要的人有所帮助. 最终的展现效果: 首先,第一步是你得从纯文本中找到它们.毫无疑问 ...

  9. IOS -刷帧动画(CADisplayLink)

    @property (nonatomic, assign) int imageY; @end @implementation NJView -(void)awakeFromNib { NSLog(@& ...

  10. 【BZOJ2002】[HNOI2010] 弹飞绵羊(大力分块)

    点此看题面 大致题意: 有\(n\)个弹力装置,当到达第\(i\)个装置时,会被弹到第\(i+k_i\)个装置,若不存在第\(i+k_i\)个装置,就会被弹飞.有两种操作,一种操作是将\(k_x\)改 ...