classSolution: defminimumBoxes(self, apple: List[int], capacity: List[int]) -> int: capacity.sort() tot = sum(apple) now = 0 res = 0 for i inrange(len(capacity) - 1, -1, -1): now += capacity[i] res += 1 if now >= tot: return res return res
use std::cmp::Reverse;
implSolution { pubfnminimum_boxes(apple: Vec<i32>, capacity: Vec<i32>) ->i32 { letmut arr = capacity.to_vec(); arr.sort_by_key(|&x| Reverse(x)); lettot: i32 = apple.iter().sum(); letmut now = 0; letmut res = 0; for &i in arr.iter() { now += i; res += 1; if now >= tot { return res; } } res } }
3075. 幸福值最大化的选择方案
给你一个长度为 n 的数组 happiness ,以及一个 正整数k 。
n 个孩子站成一队,其中第 i 个孩子的 幸福值 是 happiness[i] 。你计划组织 k 轮筛选从这 n 个孩子中选出 k 个孩子。
classSolution: defmaximumHappinessSum(self, happiness: List[int], k: int) -> int: n = len(happiness) res = 0 happiness.sort(reverse = True) for i, x inenumerate(happiness[:k]): res += max(x - i, 0) return res
implSolution { pubfnmaximum_happiness_sum(happiness: Vec<i32>, k: i32) ->i64 { letmut happiness = happiness.to_vec(); letn = happiness.len(); letmut res = 0; happiness.sort_by(|a, b| b.cmp(a)); // sort in descending order for (i, &x) in happiness.iter().enumerate().take(k asusize) { res += std::cmp::max(x - (i asi32), 0) asi64; } res } }
classSolution: defshortestSubstrings(self, arr: List[str]) -> List[str]: defcheck(i, sub) -> bool: for j, s inenumerate(arr): if j != i and sub in s: returnFalse returnTrue ans = [] for i, s inenumerate(arr): cur = "" for j inrange(len(s)): for k inrange(j, len(s)): t = s[j : k + 1] if check(i, t): ifnot cur orlen(cur) > len(t) or (len(cur) == len(t) and t < cur): cur = t ans.append(cur) return ans
implSolution { pubfnshortest_substrings(arr: Vec<String>) ->Vec<String> { fncheck(i: usize, sub: &str, arr: &Vec<String>) ->bool { for (j, s) in arr.iter().enumerate() { if j != i && s.contains(sub) { returnfalse; } } true } letmut ans = Vec::new(); for (i, s) in arr.iter().enumerate() { letmut cur = String::new(); forjin0..s.len() { forkin j..s.len() { lett = &s[j..=k]; ifcheck(i, t, &arr) { if cur.is_empty() || cur.len() > t.len() || (cur.len() == t.len() && t < &cur) { cur = t.to_string(); } } } } ans.push(cur); } ans } }
3077. K 个不相交子数组的最大能量值
给你一个长度为 n 下标从 0 开始的整数数组 nums 和一个 正奇数 整数 k 。
x 个子数组的能量值定义为 strength = sum[1] * x - sum[2] * (x - 1) + sum[3] * (x - 2) - sum[4] * (x - 3) + ... + sum[x] * 1 ,其中 sum[i] 是第 i 个子数组的和。更正式的,能量值是满足 1 <= i <= x 的所有 i 对应的 (-1)i+1 * sum[i] * (x - i + 1) 之和。