给你两个 非负 整数 num1 和 num2 。
每一步 操作 中,如果 num1 >= num2 ,你必须用 num1 减 num2 ;否则,你必须用 num2 减 num1 。
例如,num1 = 5 且 num2 = 4 ,应该用 num1 减 num2 ,因此,得到 num1 = 1 和 num2 = 4 。然而,如果 num1 = 4且 num2 = 5 ,一步操作后,得到 num1 = 4 和 num2 = 1 。
返回使 num1 = 0 或 num2 = 0 的 操作数 。
func countOperations(num1 int, num2 int) int { count := 0 for num1 != 0 && num2 != 0 { count++ num1, num2 = minus(num1, num2) } return count }
func minus(a, b int) (int, int) { if a >= b { return a - b, b } else { return a, b - a } }
|
给你一个下标从 0 开始的数组 nums ,该数组由 n 个正整数组成。
如果满足下述条件,则数组 nums 是一个 交替数组 :
nums[i - 2] == nums[i] ,其中 2 <= i <= n - 1 。
nums[i - 1] != nums[i] ,其中 1 <= i <= n - 1 。
在一步 操作 中,你可以选择下标 i 并将 nums[i] 更改 为 任一 正整数。
返回使数组变成交替数组的 最少操作数 。
提示:
1 <= nums.length <= 105
1 <= nums[i] <= 105
func minimumOperations(nums []int) int { odd := make(map[int]int) even := make(map[int]int) isOdd := true for _, num := range nums { if isOdd { odd[num]++ } else { even[num]++ } isOdd = !isOdd } maxA1 := 0 maxB1 := 0 maxA1Time := 0 maxA2Time := 0 maxB1Time := 0 maxB2Time := 0 for num, t := range odd { if t > maxA1Time { maxA2Time = maxA1Time maxA1Time = t maxA1 = num } else if t > maxA2Time { maxA2Time = t } }
for num, t := range even { if t > maxB1Time { maxB2Time = maxB1Time maxB1Time = t maxB1 = num } else if t > maxB2Time { maxB2Time = t } } if maxA1 != maxB1 { return len(nums) - maxA1Time - maxB1Time } else { if len(nums)-maxA1Time-maxB2Time > len(nums)-maxA2Time-maxB1Time { return len(nums) - maxA2Time - maxB1Time } else { return len(nums) - maxA1Time - maxB2Time } } }
|
给你一个 正 整数数组 beans ,其中每个整数表示一个袋子里装的魔法豆的数目。
请你从每个袋子中 拿出 一些豆子(也可以 不拿出),使得剩下的 非空 袋子中(即 至少 还有 一颗 魔法豆的袋子)魔法豆的数目 相等 。一旦魔法豆从袋子中取出,你不能将它放到任何其他的袋子中。
请你返回你需要拿出魔法豆的 最少数目。
提示:
1 <= beans.length <= 105
1 <= beans[i] <= 105
func minimumRemoval(beans []int) int64 { var count int64 = 0 for _, bean := range beans { _count := int64(0) for _, i := range beans { if i >= bean { _count += int64(i - bean) } else { _count += int64(i) } } if _count < count || count == 0 { count = _count } } return count }
|