| 模型 | 模型答案 | 正确答案 |
|---|---|---|
| 金声玉亮2.0 | ```python while left <= right: pivot_index = random.randint(left, right) pivot_value = nums[pivot_index] nums[left], nums[pivot_index] = nums[pivot_index], nums[left] lt, gt = tri_partition(nums, left + 1, right, pivot_value, compare) if left + n - 1 < lt: left = lt + 1 elif left + n - 1 > gt: right = gt - 1 else: return n = len(nums) min_cost = float('inf') for i in range(1, n - 1): for j in range(i + 1, n): cost = nums[0] + nums[i] + nums[j] min_cost = min(min_cost, cost) return min_cost ``` |
class Solution(object): def minimumCost(self, nums): """ :type nums: List[int] :rtype: int """ def nth_element(nums, n, left=0, compare=lambda a, b: a < b): def tri_partition(nums, left, right, target, compare): mid = left while mid <= right: if nums[mid] == target: mid += 1 elif compare(nums[mid], target): nums[left], nums[mid] = nums[mid], nums[left] left += 1 mid += 1 else: nums[mid], nums[right] = nums[right], nums[mid] right -= 1 return left, right right = len(nums)-1 while left <= right: pivot_idx = random.randint(left, right) pivot_left, pivot_right = tri_partition(nums, left, right, nums[pivot_idx], compare) if pivot_left <= n <= pivot_right: return elif pivot_left > n: right = pivot_left-1 else: # pivot_right < n. left = pivot_right+1 nth_element(nums, 1+(2-1), 1) return nums[0]+nums[1]+nums[2] |
| deepseek-r1 | ``` n = len(nums) min_total = float('inf') for i in range(n - 2): for j in range(i + 1, n - 1): current = nums[0] + nums[i+1] + nums[j+1] if current < min_total: min_total = current return min_total ``` |
class Solution(object): def minimumCost(self, nums): """ :type nums: List[int] :rtype: int """ def nth_element(nums, n, left=0, compare=lambda a, b: a < b): def tri_partition(nums, left, right, target, compare): mid = left while mid <= right: if nums[mid] == target: mid += 1 elif compare(nums[mid], target): nums[left], nums[mid] = nums[mid], nums[left] left += 1 mid += 1 else: nums[mid], nums[right] = nums[right], nums[mid] right -= 1 return left, right right = len(nums)-1 while left <= right: pivot_idx = random.randint(left, right) pivot_left, pivot_right = tri_partition(nums, left, right, nums[pivot_idx], compare) if pivot_left <= n <= pivot_right: return elif pivot_left > n: right = pivot_left-1 else: # pivot_right < n. left = pivot_right+1 nth_element(nums, 1+(2-1), 1) return nums[0]+nums[1]+nums[2] |
| gpto1 | ```python n = len(nums) suffix_min = [0] * n suffix_min[-1] = nums[-1] for i in range(n - 2, -1, -1): suffix_min[i] = min(nums[i], suffix_min[i + 1]) min_total_cost = float('inf') for i in range(1, n - 1): total_cost = nums[0] + nums[i] + suffix_min[i + 1] min_total_cost = min(min_total_cost, total_cost) return min_total_cost ``` |
class Solution(object): def minimumCost(self, nums): """ :type nums: List[int] :rtype: int """ def nth_element(nums, n, left=0, compare=lambda a, b: a < b): def tri_partition(nums, left, right, target, compare): mid = left while mid <= right: if nums[mid] == target: mid += 1 elif compare(nums[mid], target): nums[left], nums[mid] = nums[mid], nums[left] left += 1 mid += 1 else: nums[mid], nums[right] = nums[right], nums[mid] right -= 1 return left, right right = len(nums)-1 while left <= right: pivot_idx = random.randint(left, right) pivot_left, pivot_right = tri_partition(nums, left, right, nums[pivot_idx], compare) if pivot_left <= n <= pivot_right: return elif pivot_left > n: right = pivot_left-1 else: # pivot_right < n. left = pivot_right+1 nth_element(nums, 1+(2-1), 1) return nums[0]+nums[1]+nums[2] |
| gpt-4o-2024-08-06 | ```python while left <= right: pivot = nums[(left + right) // 2] mid_left, mid_right = tri_partition(nums, left, right, pivot, compare) if n < mid_left: right = mid_left - 1 elif n > mid_right: left = mid_right + 1 else: return nums[n] n = len(nums) # We need to find the minimum sum of the first elements of 3 subarrays # We can do this by finding the 2 smallest elements in the array # and using them as the first elements of the second and third subarrays # The first element of the first subarray will be the smallest element in the array # Find the smallest element first_min = nth_element(nums[:], 0) # Find the second smallest element second_min = nth_element(nums[:], 1) # Find the third smallest element third_min = nth_element(nums[:], 2) # The minimum cost is the sum of these three smallest elements return first_min + second_min + third_min ``` |
class Solution(object): def minimumCost(self, nums): """ :type nums: List[int] :rtype: int """ def nth_element(nums, n, left=0, compare=lambda a, b: a < b): def tri_partition(nums, left, right, target, compare): mid = left while mid <= right: if nums[mid] == target: mid += 1 elif compare(nums[mid], target): nums[left], nums[mid] = nums[mid], nums[left] left += 1 mid += 1 else: nums[mid], nums[right] = nums[right], nums[mid] right -= 1 return left, right right = len(nums)-1 while left <= right: pivot_idx = random.randint(left, right) pivot_left, pivot_right = tri_partition(nums, left, right, nums[pivot_idx], compare) if pivot_left <= n <= pivot_right: return elif pivot_left > n: right = pivot_left-1 else: # pivot_right < n. left = pivot_right+1 nth_element(nums, 1+(2-1), 1) return nums[0]+nums[1]+nums[2] |
| DeepSeek-Coder-V2-Lite-Instruct | ```python while left <= right: pivot_idx = random.randint(left, right) pivot_left, pivot_right = tri_partition(nums, left, right, nums[pivot_idx], compare) if pivot_left <= n <= pivot_right: return elif pivot_left > n: right = pivot_left - 1 else: left = pivot_right + 1 n = len(nums) total_cost = float('inf') for i in range(n-2): for j in range(i+1, n-1): cost1 = sum(nums[:i+1]) cost2 = sum(nums[i+1:j+1]) cost3 = sum(nums[j+1:]) total_cost = min(total_cost, cost1 + cost2 + cost3) return total_cost ``` |
class Solution(object): def minimumCost(self, nums): """ :type nums: List[int] :rtype: int """ def nth_element(nums, n, left=0, compare=lambda a, b: a < b): def tri_partition(nums, left, right, target, compare): mid = left while mid <= right: if nums[mid] == target: mid += 1 elif compare(nums[mid], target): nums[left], nums[mid] = nums[mid], nums[left] left += 1 mid += 1 else: nums[mid], nums[right] = nums[right], nums[mid] right -= 1 return left, right right = len(nums)-1 while left <= right: pivot_idx = random.randint(left, right) pivot_left, pivot_right = tri_partition(nums, left, right, nums[pivot_idx], compare) if pivot_left <= n <= pivot_right: return elif pivot_left > n: right = pivot_left-1 else: # pivot_right < n. left = pivot_right+1 nth_element(nums, 1+(2-1), 1) return nums[0]+nums[1]+nums[2] |
| Meta-Llama-3.1-405B-Instruct-Turbo | ```python if left == right: return nums[left] pivot_index = (left + right) // 2 pivot_index, _ = tri_partition(nums, left, right, nums[pivot_index], compare) if n == pivot_index: return nums[n] elif n < pivot_index: return nth_element(nums, n, left, compare) else: return nth_element(nums, n, pivot_index+1, compare) first = nth_element(nums, 0) second = nth_element(nums, 1) third = nth_element(nums, 2) return first + second + third ``` |
class Solution(object): def minimumCost(self, nums): """ :type nums: List[int] :rtype: int """ def nth_element(nums, n, left=0, compare=lambda a, b: a < b): def tri_partition(nums, left, right, target, compare): mid = left while mid <= right: if nums[mid] == target: mid += 1 elif compare(nums[mid], target): nums[left], nums[mid] = nums[mid], nums[left] left += 1 mid += 1 else: nums[mid], nums[right] = nums[right], nums[mid] right -= 1 return left, right right = len(nums)-1 while left <= right: pivot_idx = random.randint(left, right) pivot_left, pivot_right = tri_partition(nums, left, right, nums[pivot_idx], compare) if pivot_left <= n <= pivot_right: return elif pivot_left > n: right = pivot_left-1 else: # pivot_right < n. left = pivot_right+1 nth_element(nums, 1+(2-1), 1) return nums[0]+nums[1]+nums[2] |
| Meta-Llama-3.1-70B-Instruct-Turbo | ```python while left <= right: left, right = tri_partition(nums, left, right, nums[n], compare) return nums[left-1] if left > 0 else None n = len(nums) return nth_element(nums, n//3) + nth_element(nums, 2*n//3, n//3) ``` |
class Solution(object): def minimumCost(self, nums): """ :type nums: List[int] :rtype: int """ def nth_element(nums, n, left=0, compare=lambda a, b: a < b): def tri_partition(nums, left, right, target, compare): mid = left while mid <= right: if nums[mid] == target: mid += 1 elif compare(nums[mid], target): nums[left], nums[mid] = nums[mid], nums[left] left += 1 mid += 1 else: nums[mid], nums[right] = nums[right], nums[mid] right -= 1 return left, right right = len(nums)-1 while left <= right: pivot_idx = random.randint(left, right) pivot_left, pivot_right = tri_partition(nums, left, right, nums[pivot_idx], compare) if pivot_left <= n <= pivot_right: return elif pivot_left > n: right = pivot_left-1 else: # pivot_right < n. left = pivot_right+1 nth_element(nums, 1+(2-1), 1) return nums[0]+nums[1]+nums[2] |
| Qwen2-72B-Instruct | ```python if left < right: pivot = nums[(left + right) // 2] left_partition, right_partition = tri_partition(nums, left, right, pivot, compare) if n <= left_partition: nth_element(nums, n, left, compare) elif n > right_partition: nth_element(nums, n, right_partition + 1, compare) else: return nth_element(nums, 2) nth_element(nums, 1) return nums[0] + nums[1] + nums[2] ``` ``` |
class Solution(object): def minimumCost(self, nums): """ :type nums: List[int] :rtype: int """ def nth_element(nums, n, left=0, compare=lambda a, b: a < b): def tri_partition(nums, left, right, target, compare): mid = left while mid <= right: if nums[mid] == target: mid += 1 elif compare(nums[mid], target): nums[left], nums[mid] = nums[mid], nums[left] left += 1 mid += 1 else: nums[mid], nums[right] = nums[right], nums[mid] right -= 1 return left, right right = len(nums)-1 while left <= right: pivot_idx = random.randint(left, right) pivot_left, pivot_right = tri_partition(nums, left, right, nums[pivot_idx], compare) if pivot_left <= n <= pivot_right: return elif pivot_left > n: right = pivot_left-1 else: # pivot_right < n. left = pivot_right+1 nth_element(nums, 1+(2-1), 1) return nums[0]+nums[1]+nums[2] |
| baichuan4 | ```python class Solution(object): def minimumCost(self, nums): """ :type nums: List[int] :rtype: int """ # Sort the array to make sure we always pick the smallest element first nums.sort() # Initialize the cost to 0 cost = 0 # Loop through the sorted array and add the first element of each subarray to the cost for i in range(0, len(nums), 3): cost += nums[i] return cost ``` |
class Solution(object): def minimumCost(self, nums): """ :type nums: List[int] :rtype: int """ def nth_element(nums, n, left=0, compare=lambda a, b: a < b): def tri_partition(nums, left, right, target, compare): mid = left while mid <= right: if nums[mid] == target: mid += 1 elif compare(nums[mid], target): nums[left], nums[mid] = nums[mid], nums[left] left += 1 mid += 1 else: nums[mid], nums[right] = nums[right], nums[mid] right -= 1 return left, right right = len(nums)-1 while left <= right: pivot_idx = random.randint(left, right) pivot_left, pivot_right = tri_partition(nums, left, right, nums[pivot_idx], compare) if pivot_left <= n <= pivot_right: return elif pivot_left > n: right = pivot_left-1 else: # pivot_right < n. left = pivot_right+1 nth_element(nums, 1+(2-1), 1) return nums[0]+nums[1]+nums[2] |
| doubao | ```python while left < right: target = nums[(left + right) // 2] left_part, right_part = tri_partition(nums, left, right, target, compare) if n < left_part: right = left_part - 1 elif n > right_part: left = right_part + 1 else: return target return nums[left] min_cost = float('inf') for i in range(1, len(nums) - 1): first = nth_element(nums, 0) second = nth_element(nums, i) third = nth_element(nums, len(nums) - 1) min_cost = min(min_cost, first + second + third) return min_cost ``` |
class Solution(object): def minimumCost(self, nums): """ :type nums: List[int] :rtype: int """ def nth_element(nums, n, left=0, compare=lambda a, b: a < b): def tri_partition(nums, left, right, target, compare): mid = left while mid <= right: if nums[mid] == target: mid += 1 elif compare(nums[mid], target): nums[left], nums[mid] = nums[mid], nums[left] left += 1 mid += 1 else: nums[mid], nums[right] = nums[right], nums[mid] right -= 1 return left, right right = len(nums)-1 while left <= right: pivot_idx = random.randint(left, right) pivot_left, pivot_right = tri_partition(nums, left, right, nums[pivot_idx], compare) if pivot_left <= n <= pivot_right: return elif pivot_left > n: right = pivot_left-1 else: # pivot_right < n. left = pivot_right+1 nth_element(nums, 1+(2-1), 1) return nums[0]+nums[1]+nums[2] |
| gpto1 | ```python n = len(nums) suffix_min = [0] * n suffix_min[-1] = nums[-1] for i in range(n - 2, -1, -1): suffix_min[i] = min(nums[i], suffix_min[i + 1]) min_total_cost = float('inf') for i in range(1, n - 1): total_cost = nums[0] + nums[i] + suffix_min[i + 1] min_total_cost = min(min_total_cost, total_cost) return min_total_cost ``` |
class Solution(object): def minimumCost(self, nums): """ :type nums: List[int] :rtype: int """ def nth_element(nums, n, left=0, compare=lambda a, b: a < b): def tri_partition(nums, left, right, target, compare): mid = left while mid <= right: if nums[mid] == target: mid += 1 elif compare(nums[mid], target): nums[left], nums[mid] = nums[mid], nums[left] left += 1 mid += 1 else: nums[mid], nums[right] = nums[right], nums[mid] right -= 1 return left, right right = len(nums)-1 while left <= right: pivot_idx = random.randint(left, right) pivot_left, pivot_right = tri_partition(nums, left, right, nums[pivot_idx], compare) if pivot_left <= n <= pivot_right: return elif pivot_left > n: right = pivot_left-1 else: # pivot_right < n. left = pivot_right+1 nth_element(nums, 1+(2-1), 1) return nums[0]+nums[1]+nums[2] |
| kimi | ```python if left > right: return pivot_index, right = tri_partition(nums, left, right, nums[n], compare) if pivot_index == n: return elif pivot_index < n: nth_element(nums, n, pivot_index + 1, compare) else: nth_element(nums, n, left, compare) def cost(nums, cut): return sum(nums[:cut[0] + 1]) + sum(nums[cut[0] + 1:cut[1] + 1]) + sum(nums[cut[1] + 1:]) min_cost = float('inf') for i in range(1, len(nums) - 1): nth_element(nums, i, 0) for j in range(i + 1, len(nums)): nth_element(nums, j - i - 1, i + 1) cut = [i, j] min_cost = min(min_cost, cost(nums, cut)) return min_cost ``` |
class Solution(object): def minimumCost(self, nums): """ :type nums: List[int] :rtype: int """ def nth_element(nums, n, left=0, compare=lambda a, b: a < b): def tri_partition(nums, left, right, target, compare): mid = left while mid <= right: if nums[mid] == target: mid += 1 elif compare(nums[mid], target): nums[left], nums[mid] = nums[mid], nums[left] left += 1 mid += 1 else: nums[mid], nums[right] = nums[right], nums[mid] right -= 1 return left, right right = len(nums)-1 while left <= right: pivot_idx = random.randint(left, right) pivot_left, pivot_right = tri_partition(nums, left, right, nums[pivot_idx], compare) if pivot_left <= n <= pivot_right: return elif pivot_left > n: right = pivot_left-1 else: # pivot_right < n. left = pivot_right+1 nth_element(nums, 1+(2-1), 1) return nums[0]+nums[1]+nums[2] |
| minimax | ```python class Solution(object): def minimumCost(self, nums): """ :type nums: List[int] :rtype: int """ def nth_element(nums, n, left=0, compare=lambda a, b: a < b): def tri_partition(nums, left, right, target, compare): mid = left while mid <= right: if nums[mid] == target: mid += 1 elif compare(nums[mid], target): nums[left], nums[mid] = nums[mid], nums[left] left += 1 mid += 1 else: nums[mid], nums[right] = nums[right], nums[mid] right -= 1 return left, right right = len(nums) - 1 pivot = nums[left] l, r = left, right while l <= r: if nums[l] < pivot: l += 1 elif nums[r] > pivot: r -= 1 else: nums[l], nums[r] = nums[r], nums[l] l += 1 r -= 1 nums[left], nums[r] = nums[r], |
class Solution(object): def minimumCost(self, nums): """ :type nums: List[int] :rtype: int """ def nth_element(nums, n, left=0, compare=lambda a, b: a < b): def tri_partition(nums, left, right, target, compare): mid = left while mid <= right: if nums[mid] == target: mid += 1 elif compare(nums[mid], target): nums[left], nums[mid] = nums[mid], nums[left] left += 1 mid += 1 else: nums[mid], nums[right] = nums[right], nums[mid] right -= 1 return left, right right = len(nums)-1 while left <= right: pivot_idx = random.randint(left, right) pivot_left, pivot_right = tri_partition(nums, left, right, nums[pivot_idx], compare) if pivot_left <= n <= pivot_right: return elif pivot_left > n: right = pivot_left-1 else: # pivot_right < n. left = pivot_right+1 nth_element(nums, 1+(2-1), 1) return nums[0]+nums[1]+nums[2] |
| wenxinyiyan | ```python target = None while left < right: pivot_index = (left + right) // 2 pivot = nums[pivot_index] left_ptr, right_ptr = tri_partition(nums, left, right, pivot, compare) if right_ptr == len(nums) - 1: if n == right_ptr: return nums[n] elif n < right_ptr: right = right_ptr - 1 else: left = left_ptr elif n == right_ptr: return nums[n] elif n < right_ptr: right = right_ptr else: left, target = left_ptr, nums[right_ptr] return nums[n] n = len(nums) dp = [[float('inf')] * n for _ in range(n)] prefix_min = [float('inf')] * n prefix_min[0] = nums[0] for i in range(1, n): prefix_min[i] = min(prefix_min[i-1], nums[i]) for i in range(n): dp[i][i] = prefix_min[i] for j in range(i+1, n): dp[i][j] = min(dp[i][k] + dp[k+1][j] for k in range(i, j)) result = float('inf') for i in range(n-2): for j in range(i+1, n-1): result = min(result, dp[0][i] + dp[i+1][j] + dp[j+1][n-1]) return result ``` **Explanation**: The provided solution uses dynamic programming to solve the problem. Here's a step-by-step breakdown of the approach: 1. The `nth_element` function is a helper function to find the nth smallest element in the array `nums`. It's an implementation of the quickselect algorithm, which is an efficient way to find the kth smallest element without fully sorting the array. However, in this problem, we don't directly use this function, but it's kept in the code as part of the starter template. 2. We initialize a 2D dynamic programming (DP) array `dp` of size `n x n`, where `n` is the length of the input array `nums`. Each cell `dp[i][j]` represents the minimum cost of dividing the subarray `nums[i:j+1]` into one or more contiguous subarrays. We initialize all cells to infinity. 3. We also create an array `prefix_min` of size `n` to store the minimum element in the prefix of `nums` up to each index. This array helps us efficiently compute the cost of a subarray. 4. Next, we fill the DP array `dp` using a nested loop. The outer loop iterates over each starting index `i`, and the inner loop iterates over each ending index `j` such that `i <= j`. For each subarray `nums[i:j+1]`, we compute the minimum cost by considering all possible split points `k` between `i` and `j`. The cost of splitting at `k` is the sum of the minimum costs of the two subarrays `nums[i:k+1]` and `nums[k+1:j+1]`. We update `dp[i][j]` to be the minimum of all such costs. 5. After filling the DP array, we compute the final result by considering all possible ways to divide the entire array `nums` into three disjoint contiguous subarrays. We iterate over all possible split points `i` and `j` such that `0 <= i < j < n-1`, and compute the sum of the minimum costs of the three subarrays: `nums[0:i+1]`, `nums[i+1:j+1]`, and `nums[j+1:n]`. We update the `result` variable to be the minimum of all such sums. 6. Finally, we return the `result`, which represents the minimum possible sum of the costs of the three disjoint contiguous subarrays. Note: The provided solution has a time complexity of O(n^3), where n is the length of the input array `nums`. This solution is acceptable given the small constraints on the input size (3 <= n <= 5 |
class Solution(object): def minimumCost(self, nums): """ :type nums: List[int] :rtype: int """ def nth_element(nums, n, left=0, compare=lambda a, b: a < b): def tri_partition(nums, left, right, target, compare): mid = left while mid <= right: if nums[mid] == target: mid += 1 elif compare(nums[mid], target): nums[left], nums[mid] = nums[mid], nums[left] left += 1 mid += 1 else: nums[mid], nums[right] = nums[right], nums[mid] right -= 1 return left, right right = len(nums)-1 while left <= right: pivot_idx = random.randint(left, right) pivot_left, pivot_right = tri_partition(nums, left, right, nums[pivot_idx], compare) if pivot_left <= n <= pivot_right: return elif pivot_left > n: right = pivot_left-1 else: # pivot_right < n. left = pivot_right+1 nth_element(nums, 1+(2-1), 1) return nums[0]+nums[1]+nums[2] |
| zhipu | ```python while left <= right: pivot = nums[left] l, r = tri_partition(nums, left, right, pivot, compare) k = l - left + n if k == 0: return pivot elif k < 0: left = r + 1 n -= (r - left + 1) else: right = l - 1 n = len(nums) if n == 3: return sum(nums) min_cost = float('inf') for i in range(1, n-1): for j in range(i+1, n): cost = nums[0] + nums[i] + nums[j] min_cost = min(min_cost, cost) return min_cost ``` |
class Solution(object): def minimumCost(self, nums): """ :type nums: List[int] :rtype: int """ def nth_element(nums, n, left=0, compare=lambda a, b: a < b): def tri_partition(nums, left, right, target, compare): mid = left while mid <= right: if nums[mid] == target: mid += 1 elif compare(nums[mid], target): nums[left], nums[mid] = nums[mid], nums[left] left += 1 mid += 1 else: nums[mid], nums[right] = nums[right], nums[mid] right -= 1 return left, right right = len(nums)-1 while left <= right: pivot_idx = random.randint(left, right) pivot_left, pivot_right = tri_partition(nums, left, right, nums[pivot_idx], compare) if pivot_left <= n <= pivot_right: return elif pivot_left > n: right = pivot_left-1 else: # pivot_right < n. left = pivot_right+1 nth_element(nums, 1+(2-1), 1) return nums[0]+nums[1]+nums[2] |
| deepseek-v3 | ```python while left <= right: pivot = nums[left] l, r = tri_partition(nums, left, right, pivot, compare) if l <= n <= r: return nums[n] elif n < l: right = l - 1 else: left = r + 1 return nums[left] n = len(nums) if n == 3: return sum(nums) # Get the first element of each subarray # The first subarray must start at index 0 # The second subarray can start at any index from 1 to n-2 # The third subarray starts after the second subarray # So, we need to find the two best split points # To minimize the sum of the first elements of the three subarrays # We can iterate over all possible split points min_cost = float('inf') for i in range(1, n-1): for j in range(i+1, n): cost = nums[0] + nums[i] + nums[j] if cost < min_cost: min_cost = cost return min_cost ``` |
class Solution(object): def minimumCost(self, nums): """ :type nums: List[int] :rtype: int """ def nth_element(nums, n, left=0, compare=lambda a, b: a < b): def tri_partition(nums, left, right, target, compare): mid = left while mid <= right: if nums[mid] == target: mid += 1 elif compare(nums[mid], target): nums[left], nums[mid] = nums[mid], nums[left] left += 1 mid += 1 else: nums[mid], nums[right] = nums[right], nums[mid] right -= 1 return left, right right = len(nums)-1 while left <= right: pivot_idx = random.randint(left, right) pivot_left, pivot_right = tri_partition(nums, left, right, nums[pivot_idx], compare) if pivot_left <= n <= pivot_right: return elif pivot_left > n: right = pivot_left-1 else: # pivot_right < n. left = pivot_right+1 nth_element(nums, 1+(2-1), 1) return nums[0]+nums[1]+nums[2] |