列表

详情


100228. 执行操作使数据元素之和大于等于 K

给你一个正整数 k 。最初,你有一个数组 nums = [1]

你可以对数组执行以下 任意 操作 任意 次数(可能为零):

返回使得最终数组元素之大于或等于 k 所需的 最少 操作次数。

 

示例 1:

输入:k = 11

输出:5

解释:

可以对数组 nums = [1] 执行以下操作:

最终数组的和为 4 + 4 + 4 = 12 ,大于等于 k = 11
执行的总操作次数为 3 + 2 = 5

示例 2:

输入:k = 1

输出:0

解释:

原始数组的和已经大于等于 1 ,因此不需要执行操作。

 

提示:

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
class Solution { public: int minOperations(int k) { } };

golang 解法, 执行用时: 3 ms, 内存消耗: 2.1 MB, 提交时间: 2024-03-24 23:01:05

func minOperations(k int) int {
	rt := max(int(math.Sqrt(float64(k-1))), 1)
	return min(rt-1+(k-1)/rt, rt+(k-1)/(rt+1))
}

func minOperations2(k int) int {
	ans := math.MaxInt
	for m := 1; m <= k; m++ {
		ans = min(ans, m-1+(k-1)/m)
	}
	return ans
}

cpp 解法, 执行用时: 3 ms, 内存消耗: 7.2 MB, 提交时间: 2024-03-24 23:00:39

class Solution {
public:
    int minOperations(int k) {
        int ans = INT_MAX;
        for (int m = 1; m <= k; m++) {
            ans = min(ans, m - 1 + (k - 1) / m);
        }
        return ans;
    }

    int minOperations2(int k) {
        int rt = max((int) sqrt(k - 1), 1);
        return min(rt - 1 + (k - 1) / rt, rt + (k - 1) / (rt + 1));
    }
};

java 解法, 执行用时: 0 ms, 内存消耗: 39.6 MB, 提交时间: 2024-03-24 23:00:11

class Solution {
    public int minOperations(int k) {
        int rt = Math.max((int) Math.sqrt(k - 1), 1);
        return Math.min(rt - 1 + (k - 1) / rt, rt + (k - 1) / (rt + 1));
    }

    public int minOperations2(int k) {
        int ans = Integer.MAX_VALUE;
        for (int m = 1; m <= k; m++) {
            ans = Math.min(ans, m - 1 + (k - 1) / m);
        }
        return ans;
    }
}

python3 解法, 执行用时: 118 ms, 内存消耗: 16.3 MB, 提交时间: 2024-03-24 22:59:40

class Solution:
    def minOperations(self, k: int) -> int:
        return min(m - 1 + (k - 1) // m for m in range(1, k + 1))
        
    def minOperations2(self, k: int) -> int:
        rt = max(isqrt(k - 1), 1)
        return min(rt - 1 + (k - 1) // rt, rt + (k - 1) // (rt + 1))

上一题