Minimum Moves to Equal Array Elements
来源:互联网 发布:linux spi驱动 编辑:程序博客网 时间:2024/06/05 09:26
题目:
Given a non-empty integer array of size n, find the minimum number of moves required to make all array elements equal, where a move is incrementing n - 1 elements by 1.
Example:
Input:[1,2,3]Output:3Explanation:Only three moves are needed (remember each move increments two elements):[1,2,3] => [2,3,3] => [3,4,3] => [4,4,4]
解析:将一个数组所有数字变换成同一个数字,且每次只能将数组中元素个数减1个数字变换1,最后输出变换次数;
我们假设,变换之前数组和为sum,最后变换的次数为m,变换之后数组中元素都为x,数组元素为n,且数组未变换之前最小元素为minNum,则有
(1)sum+m*(n-1) = x*n;
(2)x = minNum+m;
由以上(1)(2),可得(3)sum-minNum*n = m;
Java代码实现如下(注意边界的处理):
import java.math.BigDecimal;
public class Solution {
public int minMoves(int[] nums) {
// 这道题看来很久,没有什么思路
// 一般涉及数字的算法题,都是通过寻找相应的规律来解题
// 这道题若只是找数字规律,好像很难找出数字规律
// 通过列举数学方程,找出最后的输出结果与输入之间的关系
if(nums==null){
return 0; // 边界处理
}
int count = 0; // 没有变换之前数组所有元素总和
int min = Integer.MAX_VALUE; // 没有变换之前数组中最小的元素
for(int i=0;i<nums.length;i++){
if(min>nums[i]){
min = nums[i];
}
}
for(int i:nums){
count += i;
}
return count-min*nums.length; // 由以上推出的结果输出
}
}
总结:这道easy难度的算法题,只要有思路,解答并不难,但是对的思路怎么产生,就需要解题者有解题的经验。一般算法题,通过数字找规律,像这种通过数字不能一眼找出规律的算法题,要通过数据之间的关系,进行数据梳理,列出对应的公式,最后根据多个公式降次消元等推算出结果予以代码实现。
- 453. Minimum Moves to Equal Array Elements
- 453. Minimum Moves to Equal Array Elements
- 453. Minimum Moves to Equal Array Elements
- 453. Minimum Moves to Equal Array Elements
- 453. Minimum Moves to Equal Array Elements
- 453. Minimum Moves to Equal Array Elements
- 453. Minimum Moves to Equal Array Elements
- 453. Minimum Moves to Equal Array Elements
- Minimum Moves to Equal Array Elements II
- 453. Minimum Moves to Equal Array Elements
- Leetcode453. Minimum Moves to Equal Array Elements
- Leetcode Minimum Moves to Equal Array Elements
- 453. Minimum Moves to Equal Array Elements
- ** Minimum Moves to Equal Array Elements
- Minimum Moves to Equal Array Elements
- 453. Minimum Moves to Equal Array Elements
- 453. Minimum Moves to Equal Array Elements
- 453. Minimum Moves to Equal Array Elements*
- 拦截有序广播
- html基础知识二
- 用Navicat 计划任务备份mysql数据库和创建计划任务时报错80070057
- RBAC权限管理
- Gson,FastJson, Jackson测试
- Minimum Moves to Equal Array Elements
- 刷机常出问题及解决方案
- LeetCode 9. Palindrome Number
- Caffe(18)——绘制网络模型
- golang Glide 包管理windows下使用
- 【MFC/C++操作Excel】Excel篇 (OLE/COM)
- Git Windows version default option false(core.ignorecase is true)
- Android pm 命令
- 动态规划--0-1背包问题