LeetCode#453 最小移动次数使数组元素相等
给定一个长度为 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 最小移动次数使数组元素相等的更多相关文章
- LeetCode 453. 最小移动次数使数组元素相等(Minimum Moves to Equal Array Elements) 47
453. 最小移动次数使数组元素相等 453. Minimum Moves to Equal Array Elements 题目描述 给定一个长度为 n 的非空整数数组,找到让数组所有元素相等的最小移 ...
- Java实现 LeetCode 453 最小移动次数使数组元素相等
453. 最小移动次数使数组元素相等 给定一个长度为 n 的非空整数数组,找到让数组所有元素相等的最小移动次数.每次移动可以使 n - 1 个元素增加 1. 示例: 输入: [1,2,3] 输出: 3 ...
- 力扣(LeetCode)453. 最小移动次数使数组元素相等
给定一个长度为 n 的非空整数数组,找到让数组所有元素相等的最小移动次数.每次移动可以使 n - 1 个元素增加 1. 示例: 输入: [1,2,3] 输出: 3 解释: 只需要3次移动(注意每次移动 ...
- Leetcode 462.最少移动次数使数组元素相等
最少移动次数使数组元素相等 给定一个非空整数数组,找到使所有数组元素相等所需的最小移动数,其中每次移动可将选定的一个元素加1或减1. 您可以假设数组的长度最多为10000. 例如: 输入: [1,2, ...
- Java实现 LeetCode 462 最少移动次数使数组元素相等 II
462. 最少移动次数使数组元素相等 II 给定一个非空整数数组,找到使所有数组元素相等所需的最小移动数,其中每次移动可将选定的一个元素加1或减1. 您可以假设数组的长度最多为10000. 例如: 输 ...
- 453 Minimum Moves to Equal Array Elements 最小移动次数使数组元素相等
给定一个长度为 n 的非空整数数组,找到让数组所有元素相等的最小移动次数.每次移动可以使 n - 1 个元素增加 1.示例:输入:[1,2,3]输出:3解释:只需要3次移动(注意每次移动会增加两个元素 ...
- 【leetcode 简单】 第一百零九题 最小移动次数使数组元素相等
给定一个长度为 n 的非空整数数组,找到让数组所有元素相等的最小移动次数.每次移动可以使 n - 1 个元素增加 1. 示例: 输入: [1,2,3] 输出: 3 解释: 只需要3次移动(注意每次移动 ...
- [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 ...
- Leetcode453.Minimum Moves to Equal Array Elements最小移动次数使数组元素相等
给定一个长度为 n 的非空整数数组,找到让数组所有元素相等的最小移动次数.每次移动可以使 n - 1 个元素增加 1. 示例: 输入: [1,2,3] 输出: 3 解释: 只需要3次移动(注意每次移动 ...
随机推荐
- Sum vs XOR
https://www.hackerrank.com/contests/hourrank-13/challenges/arthur-and-coprimes 要求找出所有x <= n x + ...
- JavaScript 获取 Url 上的参数(QueryString)值
获取URL里面传的参数,在Js中不能像后台一样使用Request.QueryString来获取URL里面参数,下面介绍两种方式用来获取参数 方式一:使用split分隔来获取,这种方法考试了地址中包含了 ...
- C#中接口的深入浅出【转】
C#中接口的深入浅出 假设我们公司有两种程序员:VB程序员,指的是用VB写程序的程序员,用clsVBProgramer这个类表示:Delphi程序员指的是用Delphi写程序的程序员,用clsDelp ...
- linux 解决 gvfsd-smb-browse CPU 100%占用
原文地址:https://bugzilla.redhat.com/show_bug.cgi?id=1303300 1: sudo vim /etc/samba/smb.conf 2:定位到[globa ...
- nodejs入门学习笔记一——一个完整的http路由服务实现
开始学习nodejs! 参考书籍:The Node Beginner Book ,所有问题和讨论都围绕本书. 1.学习nodejs需要具备的基础知识: js基本语法,基本上写过前端的都能满足,原生js ...
- LVS Direct Routing 直接路由
1. Direct Routing 直接路由 director分配请求到不同的real server, real server处理请求后直接回应给用户,这样director负载均衡器仅处理客户机与服务 ...
- centos执行apt-get提示不存在
在centos下用yum install xxx yum和apt-get的区别 一般来说著名的linux系统基本上分两大类: 1.RedHat系列:Redhat.Centos.Fedora等 2.De ...
- input和textarea修改placeholder颜色和字号
方式1因为每个浏览器的CSS选择器都有所差异,所以需要针对每个浏览器做单独的设定(可以在冒号前面写input和textarea).::-webkit-input-placeholder { /* We ...
- @Valid的坑
@Valid 只能用来验证 @RequestBody 标注的参数,并且要写在 @RequestBody 之前
- DBA的做法
防止有人删除数据库,创建一个触发器当数据库被删除是发送一份邮件给管理员并撤销这个命令. Create trigger [tridbsafe]ON ALL SERVERFOR DROP_DATABASE ...