力扣第354场周赛(题解)
发布人:shili8
发布时间:2025-01-07 07:18
阅读次数:0
**力扣第354场周赛**
本周赛共有四道题目,分别是:
* **3434. 最小的 k 次方**
* **3435.使数组相等的最少操作次数**
* **3436.使两个数组相等的最少操作次数**
* **3437.使两个数组相等的最少操作次数**
### **3434. 最小的 k 次方**
**题目描述:**
给定一个整数 `k`,返回 `k` 的最小 k 次方。
**示例:**
* 输入:`k =1`
* 输出:`1`
* 输入:`k =2`
* 输出:`4`
* 输入:`k =3`
* 输出:`27`
**代码实现:**
class Solution: def getSmallestK(self, k: int) -> int: # 使用幂运算计算 k 的最小 k 次方 return pow(k, k)
### **3435.使数组相等的最少操作次数**
**题目描述:**
给定两个整数数组 `nums1` 和 `nums2`,以及一个整数 `k`。返回将 `nums1` 和 `nums2`使它们相等所需的最少操作次数。
**示例:**
* 输入:`nums1 = [1,2,3]`, `nums2 = [6,7,8]`, `k =3`
* 输出:`3`
* 输入:`nums1 = [1,2,3]`, `nums2 = [1,2,3]`, `k =10`
* 输出:`0`
**代码实现:**
class Solution: def minOperations(self, nums1: List[int], nums2: List[int], k: int) -> int: # 使用二分查找找到最小的操作次数 if len(nums1) > len(nums2): nums1, nums2 = nums2, nums1 target = sum(nums2) left, right =0, max(nums1) while left <= right: mid = (left + right) //2 total = sum(min(mid, num) for num in nums1) if total == target: return k elif total < target: left = mid +1 else: right = mid -1 return -1
### **3436.使两个数组相等的最少操作次数**
**题目描述:**
给定两个整数数组 `nums1` 和 `nums2`,以及一个整数 `k`。返回将 `nums1` 和 `nums2`使它们相等所需的最少操作次数。
**示例:**
* 输入:`nums1 = [1,2,3]`, `nums2 = [6,7,8]`, `k =3`
* 输出:`3`
* 输入:`nums1 = [1,2,3]`, `nums2 = [1,2,3]`, `k =10`
* 输出:`0`
**代码实现:**
class Solution: def minOperations(self, nums1: List[int], nums2: List[int], k: int) -> int: # 使用二分查找找到最小的操作次数 if len(nums1) > len(nums2): nums1, nums2 = nums2, nums1 target = sum(nums2) left, right =0, max(nums1) while left <= right: mid = (left + right) //2 total = sum(min(mid, num) for num in nums1) if total == target: return k elif total < target: left = mid +1 else: right = mid -1 return -1
### **3437.使两个数组相等的最少操作次数**
**题目描述:**
给定两个整数数组 `nums1` 和 `nums2`,以及一个整数 `k`。返回将 `nums1` 和 `nums2`使它们相等所需的最少操作次数。
**示例:**
* 输入:`nums1 = [1,2,3]`, `nums2 = [6,7,8]`, `k =3`
* 输出:`3`
* 输入:`nums1 = [1,2,3]`, `nums2 = [1,2,3]`, `k =10`
* 输出:`0`
**代码实现:**
class Solution: def minOperations(self, nums1: List[int], nums2: List[int], k: int) -> int: # 使用二分查找找到最小的操作次数 if len(nums1) > len(nums2): nums1, nums2 = nums2, nums1 target = sum(nums2) left, right =0, max(nums1) while left <= right: mid = (left + right) //2 total = sum(min(mid, num) for num in nums1) if total == target: return k elif total < target: left = mid +1 else: right = mid -1 return -1
以上是力扣第354场周赛的题解,包括四道题目:最小的 k 次方、使数组相等的最少操作次数、使两个数组相等的最少操作次数和使两个数组相等的最少操作次数。