给定一个长度为 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. 原型设计工具 Axure RP 7.0下载地址及安装说明

    Axure RP是产品经理必备的原型制作工具,因为很多同学是新手,在这里整理一下axure7.0的下载.安装和汉化流程,希望能够帮到大家. Axure RP是美国Axure Software Solu ...

  2. Maven的学习资料收集--(七) 构建Spring项目

    在这里,使用Maven构建一个Spring项目 构建单独项目的话,其实都差不多 1. 新建一个Web项目 参考之前的博客 2.修改 pom.xml,添加Spring依赖 <project xml ...

  3. mac-httpd

    mac 的httpd mac 自带了apache2, 但是不推荐使用, 因为它的目录在/Library/WebServer/Documents/下 使用brew install apache-http ...

  4. Default Bearer, Dedicated Bearer... What exactly is bearer ?

    Default Bearer, Dedicated Bearer... What exactly is bearer ?   While trying to get a better understa ...

  5. MySQL分库分表的技巧

    分表是分散数据库压力的好方法. 分表,最直白的意思,就是将一个表结构分为多个表,然后,可以再同一个库里,也可以放到不同的库. 当然,首先要知道什么情况下,才需要分表.个人觉得单表记录条数达到百万到千万 ...

  6. 一张图掌握移动Web前端所有技术(大前端、工程化、预编译、自动化)

    你要的移动web前端都在这里! 大前端方向:移动Web前端.Native客户端.Node.js. 大前端框架:React.Vue.js.Koa  跨终端技术:HTML 5.CSS 3.JavaScri ...

  7. (已解决)Arduino mega2560 R3插在电脑上没有反应

           OK,话不多说.网上找了一些资料,感觉都说的不够清晰.自己琢磨了下,有了一个简单粗暴的方法. 步骤1:插上Arduino mega2560板子.没有反应. 步骤2:我的电脑-管理-设备管 ...

  8. 开发环境中快速部署Oracle Essbase(Rapid deployment of oracle essbase in development envrioments)

    版本:Oracle Enterprise Performance Management System Release11.1.2.4 快速部署自动安装组件: Essbase Oracle Essbas ...

  9. windows无法连接到打印机 操作失败,错误为0x00000002 解决方案

    平时使用局域网打印机没有问题,今天突然脱机了,错误号为0x00000002 服务器上打印机一切正常,别人使用也一切正常. 最后,重启了Spooler服务后搞定. 重新链接打印机,搞定!

  10. Eucalyptus学习汇总

    Elastic Utility Computing Architecture for Linking Your Programs To Useful Systems (Eucalyptus) 是一种开 ...