classSolution: deffindKOr(self, nums: List[int], k: int) -> int: returnsum(1 << i for i inrange(32) ifsum([1for x in nums if (x & (1 << i)) != 0]) >= k )
classSolution: def minSum(self, nums1: List[int], nums2: List[int]) -> int: s1 =sum(max(x, 1) for x in nums1) s2 = sum(max(x, 1) for x in nums2) zero1 = 0 in nums1 zero2 = 0 in nums2 if zero1 andnot zero2 and s1 > s2 or \ not zero1 and zero2 and s1 < s2 or \ not zero1 andnot zero2 and s1 != s2: return-1 returnmax(s1, s2)
100107. 使数组变美的最小增量运算数
给你一个下标从 0 开始、长度为 n 的整数数组 nums ,和一个整数 k 。
你可以执行下述 递增 运算 任意 次(可以是 0 次):
从范围 [0, n - 1] 中选则一个下标 i ,并将 nums[i] 的值加 1 。
如果数组中任何长度 大于或等于 3 的子数组,其 最大 元素都大于或等于 k ,则认为数组是一个 美丽数组 。
classSolution { public: long long minIncrementOperations(vector<int>& nums, int k) { int n = nums.size(); vector<long long> dp(3, 0); for (int i = 0; i < n; i++) { vector<long long> ndp(3); ndp[0] = min({dp[0], dp[1], dp[2]}) + max(0, k - nums[i]); ndp[1] = dp[0]; ndp[2] = dp[1]; dp = move(ndp); } return *min_element(dp.begin(), dp.end()); } };
classSolution { public: using LL = long long; constexpr static LL INF = 1e18; long long minIncrementOperations(vector<int>& nums, int k) { int n = nums.size(); vector<vector<LL>> dp(n, vector<LL>(8, INF)); for (int j = 1; j < 8; j++) { dp[2][j] = 0; for (int i = 0; i < 3; i++) { if (j & (1 << i)) { dp[2][j] += max(0, k - nums[i]); } } }
for (int i = 3; i < n; i++) { for (int j = 1; j < 8; j++) { for (int pre = 1; pre < 8; pre++) { long long tot = dp[i - 1][pre]; for (int t = 0; t < 3; t++) { if ((j & (1 << t)) != 0 && (pre & (1 << (t + 1))) == 0) { tot += max(0, k - nums[i - 2 + t]); } } dp[i][j] = min(dp[i][j], tot); } } }
long long ans = INF; for (int i = 1; i < 8; i++) { ans = min(ans, dp[n - 1][i]); } return ans; } };
100108. 收集所有金币可获得的最大积分
节点 0 处现有一棵由 n 个节点组成的无向树,节点编号从 0 到 n - 1 。给你一个长度为 n - 1 的二维 整数 数组 edges ,其中 edges[i] = [ai, bi] 表示在树上的节点 ai 和 bi 之间存在一条边。另给你一个下标从 0 开始、长度为 n 的数组 coins 和一个整数 k ,其中 coins[i] 表示节点 i 处的金币数量。
从根节点开始,你必须收集所有金币。要想收集节点上的金币,必须先收集该节点的祖先节点上的金币。
节点 i 上的金币可以用下述方法之一进行收集:
收集所有金币,得到共计 coins[i] - k 点积分。如果 coins[i] - k 是负数,你将会失去 abs(coins[i] - k) 点积分。