Skip to content

Commit 510a95b

Browse files
committed
新增方法二
1 parent 4489eb4 commit 510a95b

File tree

1 file changed

+30
-11
lines changed

1 file changed

+30
-11
lines changed

MiniMoves_453/MiniMoves_453/Program.cs

Lines changed: 30 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -35,20 +35,39 @@ static void Main(string[] args)
3535

3636
static int MiniMoves(int[] nums)
3737
{
38-
/*方法一*/
39-
// 将每次 n - 1个元素相加转化成
40-
// 每次将一个元素相减
41-
if (nums.Length <= 1)
42-
{
43-
return 0;
44-
}
45-
Array.Sort(nums);
38+
///*方法一*/
39+
//// 将每次 n - 1个元素相加转化成
40+
//// 每次将一个元素相减
41+
//if (nums.Length <= 1)
42+
//{
43+
// return 0;
44+
//}
45+
//Array.Sort(nums);
46+
//int sum = 0;
47+
//for (int i = 1; i < nums.Length; i++)
48+
//{
49+
// sum += nums[i] - nums[0];
50+
//}
51+
//return sum;
52+
53+
/*方法二*/
54+
// 假设:
55+
// sum : 数组所有元素和
56+
// n : 数组元素个数
57+
// minNum : 数组中最小的元素的值
58+
// x : 数组中元素相等时各元素的值
59+
// m : 使数组相等至少需要移动的次数
60+
// 于是有:sum + (n - 1) * m = n * x
61+
// => x = miniNum + m
62+
// => sum - miniNum * n = m
63+
int min = nums[0];
4664
int sum = 0;
47-
for (int i = 1; i < nums.Length; i++)
65+
foreach (var item in nums)
4866
{
49-
sum += nums[i] - nums[0];
67+
min = Math.Min(min, item);
68+
sum += item;
5069
}
51-
return sum;
70+
return sum - min * nums.Length;
5271
}
5372
}
5473
}

0 commit comments

Comments
 (0)