| 模型 | 模型答案 | 正确答案 |
|---|---|---|
| 金声玉亮2.0 | ```python from typing import List class Solution: def earliestSecondToMarkIndices(self, nums: List[int], changeIndices: List[int]) -> int: n = len(nums) m = len(changeIndices) # Convert nums to a list of decrements needed for each index decrements_needed = [0] + nums # Track the earliest second when each index can be marked earliest_mark_time = [float('inf')] * (n + 1) for second in range(1, m + 1): index = changeIndices[second - 1] if decrements_needed[index] > 0: decrements_needed[index] -= 1 if decrements_needed[index] == 0 and earliest_mark_time[index] == float('inf'): earliest_mark_time[index] = second # Check if all indices have been marked if float('inf') in earliest_mark_time[1:]: return -1 # Return the latest second among all indices' earliest mark times return max(earliest_mark_time[1:]) ``` |
[{"input": "[2, 2, 0]\n[2, 2, 2, 2, 3, 2, 2, 1]", "output": "8", "testtype": "functional"}, {"input": "[1, 3]\n[1, 1, 1, 2, 1, 1, 1]", "output": "6", "testtype": "functional"}, {"input": "[0, 1]\n[2, 2, 2]", "output": "-1", "testtype": "functional"}] |
| deepseek-r1 | ```python from typing import List import bisect class Solution: def earliestSecondToMarkIndices(self, nums: List[int], changeIndices: List[int]) -> int: n = len(nums) m = len(changeIndices) occurrences = [[] for _ in range(n)] for s in range(m): idx = changeIndices[s] - 1 # Convert to 0-based index for nums if 0 <= idx < n: occurrences[idx].append(s + 1) # Store 1-based seconds # Sort each list of occurrences for binary search for i in range(n): occurrences[i].sort() left, right = 1, m answer = -1 while left <= right: mid = (left + right) // 2 valid = True # Check if all indices have at least one occurrence up to mid for i in range(n): if not occurrences[i]: valid = False break # Find the rightmost occurrence <= mid pos = bisect.bisect_right(occurrences[i], mid) if pos == 0: valid = False break if not valid: left = mid + 1 continue # Check sum of decrements and required steps total_decrements = sum(nums) if total_decrements + n > mid: valid = False else: # Collect the last possible s_i for each index s_list = [] for i in range(n): pos = bisect.bisect_right(occurrences[i], mid) s_i = occurrences[i][pos - 1] s_list.append((s_i, nums[i])) # Sort by the chosen seconds s_list.sort() # Verify each index's decrements can be accommodated for k in range(len(s_list)): s_i, num = s_list[k] available = (s_i - 1) - k # Available steps after accounting for prior marks if available < num: valid = False break if valid: answer = mid right = mid - 1 else: left = mid + 1 return answer if answer != -1 else -1 ``` |
[{"input": "[2, 2, 0]\n[2, 2, 2, 2, 3, 2, 2, 1]", "output": "8", "testtype": "functional"}, {"input": "[1, 3]\n[1, 1, 1, 2, 1, 1, 1]", "output": "6", "testtype": "functional"}, {"input": "[0, 1]\n[2, 2, 2]", "output": "-1", "testtype": "functional"}] |
| gpto1 | ```python class Solution: def earliestSecondToMarkIndices(self, nums: List[int], changeIndices: List[int]) -> int: n = len(nums) m = len(changeIndices) import heapq # For each index i, find earliest time s_i when changeIndices[s_i] == i (1-based indexing) # positions[i] will store earliest position s_i where changeIndices[s_i] == i positions = {} for idx, ci in enumerate(changeIndices): if ci not in positions: positions[ci] = idx + 1 # s_i is idx + 1 because s ranges from 1 to m deadlines = [] total_processing_time = 0 max_deadline = 0 for i in range(1, n+1): if i not in positions: # Cannot mark index i as it never appears in changeIndices print("Index", i, "cannot be marked") return -1 d_i = positions[i] # Earliest time when changeIndices[s_i] == i p_i = nums[i-1] if p_i > d_i: # Cannot process p_i units before deadline d_i return -1 deadlines.append( (d_i, i-1) ) # Store deadlines with zero-based index total_processing_time += p_i max_deadline = max(max_deadline, d_i) if total_processing_time > m: # Not enough total time to process all decrements return -1 # Initialize min-heap of tasks (deadline, index) tasks_heap = [] p_remaining = nums.copy() # Remaining processing time for each task (nums[i]) # All tasks are available from time t=1 for d_i, idx in deadlines: heapq.heappush(tasks_heap, (d_i, idx)) time = 1 while time <= m: # Remove tasks whose deadlines have passed while tasks_heap and tasks_heap[0][0] < time: d_i, idx = heapq.heappop(tasks_heap) if p_remaining[idx] > 0: # Cannot process task idx before its deadline return -1 # else, task is already completed if not tasks_heap: # All tasks completed break # Pop task with earliest deadline d_i, idx = heapq.heappop(tasks_heap) p_remaining[idx] -= 1 # Process 1 unit of time if p_remaining[idx] > 0: # If task still has remaining time, push it back heapq.heappush(tasks_heap, (d_i, idx)) time += 1 # After m seconds, check if all tasks are completed for idx in range(n): if p_remaining[idx] > 0: return -1 # Not all tasks could be completed in time # Return the earliest second when all indices can be marked return max_deadline ``` |
[{"input": "[2, 2, 0]\n[2, 2, 2, 2, 3, 2, 2, 1]", "output": "8", "testtype": "functional"}, {"input": "[1, 3]\n[1, 1, 1, 2, 1, 1, 1]", "output": "6", "testtype": "functional"}, {"input": "[0, 1]\n[2, 2, 2]", "output": "-1", "testtype": "functional"}] |
| gpt-4o-2024-08-06 | ```python from typing import List class Solution: def earliestSecondToMarkIndices(self, nums: List[int], changeIndices: List[int]) -> int: n = len(nums) m = len(changeIndices) # To keep track of which indices are marked marked = [False] * n # To keep track of how many indices are marked marked_count = 0 # Iterate over each second for second in range(m): # Get the current index to check from changeIndices current_index = changeIndices[second] - 1 # If the current index in nums is 0, we can mark it if nums[current_index] == 0 and not marked[current_index]: marked[current_index] = True marked_count += 1 # If all indices are marked, return the current second (1-indexed) if marked_count == n: return second + 1 # Otherwise, decrement the current index in nums if it's not already zero if nums[current_index] > 0: nums[current_index] -= 1 # If we finish all seconds and not all indices are marked, return -1 return -1 ``` |
[{"input": "[2, 2, 0]\n[2, 2, 2, 2, 3, 2, 2, 1]", "output": "8", "testtype": "functional"}, {"input": "[1, 3]\n[1, 1, 1, 2, 1, 1, 1]", "output": "6", "testtype": "functional"}, {"input": "[0, 1]\n[2, 2, 2]", "output": "-1", "testtype": "functional"}] |
| DeepSeek-Coder-V2-Lite-Instruct | ```python from typing import List import heapq class Solution: def earliestSecondToMarkIndices(self, nums: List[int], changeIndices: List[int]) -> int: n = len(nums) m = len(changeIndices) # If there are indices in nums that are not in changeIndices, it's impossible to mark all indices if not all(index in changeIndices for index in range(1, n + 1)): return -1 # Use a min-heap to keep track of the smallest value in nums min_heap = [num for num in nums if num > 0] heapq.heapify(min_heap) # Use a set to keep track of marked indices marked = set() # Iterate over each second for s in range(1, m + 1): if min_heap: # Decrement the smallest value in the heap smallest = heapq.heappop(min_heap) smallest -= 1 if smallest == 0: # Mark the corresponding changeIndices index marked.add(changeIndices[s - 1]) else: # Push the decremented value back into the heap heapq.heappush(min_heap, smallest) # Check if all indices are marked if len(marked) == n: return s else: return -1 ``` |
[{"input": "[2, 2, 0]\n[2, 2, 2, 2, 3, 2, 2, 1]", "output": "8", "testtype": "functional"}, {"input": "[1, 3]\n[1, 1, 1, 2, 1, 1, 1]", "output": "6", "testtype": "functional"}, {"input": "[0, 1]\n[2, 2, 2]", "output": "-1", "testtype": "functional"}] |
| Meta-Llama-3.1-405B-Instruct-Turbo | ```python from typing import List class Solution: def earliestSecondToMarkIndices(self, nums: List[int], changeIndices: List[int]) -> int: n = len(nums) last_occurrence = [-1] * (n + 1) for i in range(len(changeIndices) - 1, -1, -1): last_occurrence[changeIndices[i]] = i + 1 if -1 in last_occurrence[1:]: return -1 max_seconds = 0 for i in range(1, n + 1): max_seconds = max(max_seconds, nums[i - 1] + last_occurrence[i]) return max_seconds ``` |
[{"input": "[2, 2, 0]\n[2, 2, 2, 2, 3, 2, 2, 1]", "output": "8", "testtype": "functional"}, {"input": "[1, 3]\n[1, 1, 1, 2, 1, 1, 1]", "output": "6", "testtype": "functional"}, {"input": "[0, 1]\n[2, 2, 2]", "output": "-1", "testtype": "functional"}] |
| Meta-Llama-3.1-70B-Instruct-Turbo | ```python from typing import List class Solution: def earliestSecondToMarkIndices(self, nums: List[int], changeIndices: List[int]) -> int: n = len(nums) m = len(changeIndices) marked = [False] * n count = 0 for i in range(m): if not marked[changeIndices[i] - 1] and nums[changeIndices[i] - 1] == 0: marked[changeIndices[i] - 1] = True count += 1 if count == n: return i + 1 if count < n: max_val = 0 max_idx = -1 for j in range(n): if not marked[j] and nums[j] > max_val: max_val = nums[j] max_idx = j nums[max_idx] -= 1 return -1 ``` |
[{"input": "[2, 2, 0]\n[2, 2, 2, 2, 3, 2, 2, 1]", "output": "8", "testtype": "functional"}, {"input": "[1, 3]\n[1, 1, 1, 2, 1, 1, 1]", "output": "6", "testtype": "functional"}, {"input": "[0, 1]\n[2, 2, 2]", "output": "-1", "testtype": "functional"}] |
| Qwen2-72B-Instruct | ```python from collections import defaultdict from typing import List class Solution: def earliestSecondToMarkIndices(self, nums: List[int], changeIndices: List[int]) -> int: # Create a dictionary to store the indices where each number in nums can be decremented decrementable_indices = defaultdict(list) for i, num in enumerate(nums): if num > 0: decrementable_indices[num].append(i + 1) # Sort the keys of the dictionary in descending order sorted_keys = sorted(decrementable_indices.keys(), reverse=True) # Initialize a set to keep track of marked indices marked_indices = set() # Iterate over the changeIndices array for second, index in enumerate(changeIndices, start=1): # If the current index is already marked, continue to the next iteration if index in marked_indices: continue # If the value at the current index is zero, mark the index if nums[index - 1] == 0: marked_indices.add(index) continue # Otherwise, find the largest decrementable index and decrement its value for key in sorted_keys: if decrementable_indices[key]: largest_index = decrementable_indices[key].pop() nums[largest_index - 1] -= 1 break # If the value at the current index becomes zero, mark the index if nums[index - 1] == 0: marked_indices.add(index) # If all indices have been marked, return the current second if len(marked_indices) == len(nums): return second # If not all indices can be marked, return -1 return -1 ``` ``` |
[{"input": "[2, 2, 0]\n[2, 2, 2, 2, 3, 2, 2, 1]", "output": "8", "testtype": "functional"}, {"input": "[1, 3]\n[1, 1, 1, 2, 1, 1, 1]", "output": "6", "testtype": "functional"}, {"input": "[0, 1]\n[2, 2, 2]", "output": "-1", "testtype": "functional"}] |
| baichuan4 | ```python from typing import List class Solution: def earliestSecondToMarkIndices(self, nums: List[int], changeIndices: List[int]) -> int: n = len(nums) m = len(changeIndices) marked = [False] * (n + 1) time_to_mark = [float('inf')] * (n + 1) # Initialize the time to mark for indices that are already at 0 for i in range(1, n + 1): if nums[i - 1] == 0: time_to_mark[i] = 0 marked[i] = True # Process each second for second in range(1, m + 1): idx = changeIndices[second - 1] # If the current index is already marked, continue to the next second if marked[idx]: continue # If the current index is at 0, mark it and update the time to mark for its dependencies if nums[idx - 1] == 0: marked[idx] = True time_to_mark[idx] = second # Update the time to mark for other indices that depend on the current index for i in range(1, n + 1): if not marked[i] and time_to_mark[i] > second: time_to_mark[i] = second else: # Decrement the value of the current index nums[idx - 1] -= 1 # Update the time to mark for the current index if time_to_mark[idx] > second + 1: time_to_mark[idx] = second + 1 # Check if all indices are marked for i in range(1, n + 1): if not marked[i]: return -1 # Return the maximum time to mark among all indices return max(time_to_mark[1:]) ``` |
[{"input": "[2, 2, 0]\n[2, 2, 2, 2, 3, 2, 2, 1]", "output": "8", "testtype": "functional"}, {"input": "[1, 3]\n[1, 1, 1, 2, 1, 1, 1]", "output": "6", "testtype": "functional"}, {"input": "[0, 1]\n[2, 2, 2]", "output": "-1", "testtype": "functional"}] |
| doubao | ```python class Solution: def earliestSecondToMarkIndices(self, nums: List[int], changeIndices: List[int]) -> int: n = len(nums) m = len(changeIndices) marked = [False] * n second = 0 while not all(marked): second += 1 if second <= m and nums[changeIndices[second - 1] - 1] == 0 and not marked[changeIndices[second - 1] - 1]: marked[changeIndices[second - 1] - 1] = True for i in range(n): if not marked[i]: nums[i] -= 1 if nums[i] == 0: marked[i] = True if second > m and not all(marked): return -1 return second ``` |
[{"input": "[2, 2, 0]\n[2, 2, 2, 2, 3, 2, 2, 1]", "output": "8", "testtype": "functional"}, {"input": "[1, 3]\n[1, 1, 1, 2, 1, 1, 1]", "output": "6", "testtype": "functional"}, {"input": "[0, 1]\n[2, 2, 2]", "output": "-1", "testtype": "functional"}] |
| gpto1 | ```python class Solution: def earliestSecondToMarkIndices(self, nums: List[int], changeIndices: List[int]) -> int: n = len(nums) m = len(changeIndices) import heapq # For each index i, find earliest time s_i when changeIndices[s_i] == i (1-based indexing) # positions[i] will store earliest position s_i where changeIndices[s_i] == i positions = {} for idx, ci in enumerate(changeIndices): if ci not in positions: positions[ci] = idx + 1 # s_i is idx + 1 because s ranges from 1 to m deadlines = [] total_processing_time = 0 max_deadline = 0 for i in range(1, n+1): if i not in positions: # Cannot mark index i as it never appears in changeIndices print("Index", i, "cannot be marked") return -1 d_i = positions[i] # Earliest time when changeIndices[s_i] == i p_i = nums[i-1] if p_i > d_i: # Cannot process p_i units before deadline d_i return -1 deadlines.append( (d_i, i-1) ) # Store deadlines with zero-based index total_processing_time += p_i max_deadline = max(max_deadline, d_i) if total_processing_time > m: # Not enough total time to process all decrements return -1 # Initialize min-heap of tasks (deadline, index) tasks_heap = [] p_remaining = nums.copy() # Remaining processing time for each task (nums[i]) # All tasks are available from time t=1 for d_i, idx in deadlines: heapq.heappush(tasks_heap, (d_i, idx)) time = 1 while time <= m: # Remove tasks whose deadlines have passed while tasks_heap and tasks_heap[0][0] < time: d_i, idx = heapq.heappop(tasks_heap) if p_remaining[idx] > 0: # Cannot process task idx before its deadline return -1 # else, task is already completed if not tasks_heap: # All tasks completed break # Pop task with earliest deadline d_i, idx = heapq.heappop(tasks_heap) p_remaining[idx] -= 1 # Process 1 unit of time if p_remaining[idx] > 0: # If task still has remaining time, push it back heapq.heappush(tasks_heap, (d_i, idx)) time += 1 # After m seconds, check if all tasks are completed for idx in range(n): if p_remaining[idx] > 0: return -1 # Not all tasks could be completed in time # Return the earliest second when all indices can be marked return max_deadline ``` |
[{"input": "[2, 2, 0]\n[2, 2, 2, 2, 3, 2, 2, 1]", "output": "8", "testtype": "functional"}, {"input": "[1, 3]\n[1, 1, 1, 2, 1, 1, 1]", "output": "6", "testtype": "functional"}, {"input": "[0, 1]\n[2, 2, 2]", "output": "-1", "testtype": "functional"}] |
| kimi | ```python from typing import List from collections import defaultdict class Solution: def earliestSecondToMarkIndices(self, nums: List[int], changeIndices: List[int]) -> int: m = len(changeIndices) n = len(nums) marked = [False] * n count = defaultdict(int) for i in changeIndices: count[i] += 1 max_count = max(count.values()) for i in range(n): if count[i+1] == 0: return -1 for i in range(m): nums[changeIndices[i] - 1] -= 1 if nums[changeIndices[i] - 1] == 0: max_count = min(max_count, min(count.values())) count[changeIndices[i]] -= 1 if count[changeIndices[i]] == 0: max_count -= 1 if max_count == 0: return i + 1 return -1 ``` |
[{"input": "[2, 2, 0]\n[2, 2, 2, 2, 3, 2, 2, 1]", "output": "8", "testtype": "functional"}, {"input": "[1, 3]\n[1, 1, 1, 2, 1, 1, 1]", "output": "6", "testtype": "functional"}, {"input": "[0, 1]\n[2, 2, 2]", "output": "-1", "testtype": "functional"}] |
| minimax | ```python from typing import List class Solution: def earliestSecondToMarkIndices(self, nums: List[int], changeIndices: List[int]) -> int: n = len(nums) m = len(changeIndices) marked = [False] * n # Create a mapping from index to the earliest second it can be marked earliest_mark = {i: float('inf') for i in range(1, n+1)} # Initialize the earliest mark time for the indices in changeIndices for s in range(m): index = changeIndices[s] earliest_mark[index] = min(earliest_mark[index], s+1) # Iterate through each second for s in range(1, m+1): index = changeIndices[s-1] if nums[index-1] > 0: nums[index-1] -= 1 # Update the earliest mark time for the indices that can be marked now for i in range(1, n+1): if nums[i-1] == 0 and not marked[i-1]: earliest_mark[i] = min(earliest_mark[i], s) marked[i-1 |
[{"input": "[2, 2, 0]\n[2, 2, 2, 2, 3, 2, 2, 1]", "output": "8", "testtype": "functional"}, {"input": "[1, 3]\n[1, 1, 1, 2, 1, 1, 1]", "output": "6", "testtype": "functional"}, {"input": "[0, 1]\n[2, 2, 2]", "output": "-1", "testtype": "functional"}] |
| wenxinyiyan | ```python from typing import List class Solution: def earliestSecondToMarkIndices(self, nums: List[int], changeIndices: List[int]) -> int: n = len(nums) m = len(changeIndices) max_time = m + 1 # Initialize with a value larger than m # Check if all indices are present in changeIndices indices_set = set(changeIndices) if len(indices_set) != n: return -1 # Initialize an array to keep track of the earliest second when an index can be marked earliest_mark = [max_time] * n # Initialize an array to keep track of the current value of nums after decrement operations current_nums = nums.copy() # Iterate through each second for s in range(1, m + 1): index = changeIndices[s - 1] - 1 # Convert to 0-indexed # Decrement the current value of nums at the given index if current_nums[index] > 0: current_nums[index] -= 1 # If the current value is 0, update the earliest mark time for the index if current_nums[index] == 0: earliest_mark[index] = min(earliest_mark[index], s) # Find the maximum earliest mark time among all indices max_earliest_mark = max(earliest_mark) # If any index has not been marked, return -1; otherwise, return the maximum earliest mark time return max_earliest_mark if max_earliest_mark != max_time else -1 ``` Note: The provided solution assumes that the input arrays `nums` and `changeIndices` are valid and satisfy the given constraints. It also assumes that the `List` type has been imported from the `typing` module. However, there is a slight modification needed in the logic to handle cases where not all indices are present in `changeIndices`. Instead of checking this condition at the beginning, we can update the `earliest_mark` array only for indices that are present in `changeIndices`. This way, if an index is missing, its corresponding value in `earliest_mark` will remain `max_time`, indicating that it cannot be marked. Here's the updated solution with this modification: ```python from typing import List class Solution: def earliestSecondToMarkIndices(self, nums: List[int], changeIndices: List[int]) -> int: n = len(nums) m = len(changeIndices) max_time = m + 1 # Initialize with a value larger than m # Initialize an array to keep track of the earliest second when an index can be marked earliest_mark = [max_time] * n # Initialize an array to keep track of the current value of nums after decrement operations current_nums = nums.copy() # Iterate through each second for s in range(1, m + 1): index = changeIndices[s - 1] - 1 # Convert to 0-indexed # Decrement the current value of nums at the given index if current_nums[index] > 0: current_nums[index] -= 1 # If the current value is 0, update the earliest mark time for the index if current_nums[index] == 0: earliest_mark[index] = min(earliest_mark[index], s) # Find the maximum earliest mark time among all indices present in changeIndices max_earliest_mark = -1 for index in set(changeIndices) - {0}: # Exclude 0 and convert to 0-indexed set index -= 1 max_earliest_mark = max(max_earliest_mark, earliest_mark[index]) # If any index has not been marked (i.e., its earliest_mark value is still max_time), return -1 if max_earliest_mark == max_time: return -1 # Return the maximum earliest mark time return max_earliest_mark ``` Note: In the updated solution, we exclude `0` from the `set(changeIndices)` because the indices are 1-indexed in the input but we convert them to 0-indexed for internal processing. However |
[{"input": "[2, 2, 0]\n[2, 2, 2, 2, 3, 2, 2, 1]", "output": "8", "testtype": "functional"}, {"input": "[1, 3]\n[1, 1, 1, 2, 1, 1, 1]", "output": "6", "testtype": "functional"}, {"input": "[0, 1]\n[2, 2, 2]", "output": "-1", "testtype": "functional"}] |
| zhipu | ```python from typing import List class Solution: def earliestSecondToMarkIndices(self, nums: List[int], changeIndices: List[int]) -> int: n = len(nums) m = len(changeIndices) # Adjust changeIndices to be zero-indexed changeIndices = [i - 1 for i in changeIndices] # Initialize the marked array marked = [False] * n # Total decrements needed to mark all indices total_decrements = sum(nums) # If total decrements needed is more than the number of seconds available, it's impossible if total_decrements > m: return -1 # Track the last position each index can be marked last_possible_mark = [-1] * n for s in range(m): index = changeIndices[s] if nums[index] == 0: last_possible_mark[index] = s # If any index cannot be marked, return -1 if -1 in last_possible_mark: return -1 # Binary search to find the earliest second all indices can be marked left, right = 1, m while left < right: mid = (left + right) // 2 decrements_used = 0 temp_marked = [False] * n for s in range(mid): index = changeIndices[s] if nums[index] > 0: decrements_used += 1 if nums[index] == 0: temp_marked[index] = True # Check if all indices can be marked by mid if all(temp_marked) and decrements_used <= mid: right = mid else: left = mid + 1 # Final check to confirm all indices can be marked at `left` decrements_used = 0 temp_marked = [False] * n for s in range(left): index = changeIndices[s] if nums[index] > 0: decrements_used += 1 if nums[index] == 0: temp_marked[index] = True if all(temp_marked) and decrements_used <= left: return left else: return -1 ``` |
[{"input": "[2, 2, 0]\n[2, 2, 2, 2, 3, 2, 2, 1]", "output": "8", "testtype": "functional"}, {"input": "[1, 3]\n[1, 1, 1, 2, 1, 1, 1]", "output": "6", "testtype": "functional"}, {"input": "[0, 1]\n[2, 2, 2]", "output": "-1", "testtype": "functional"}] |
| deepseek-v3 | ```python from typing import List class Solution: def earliestSecondToMarkIndices(self, nums: List[int], changeIndices: List[int]) -> int: n = len(nums) m = len(changeIndices) # Preprocess to find the last occurrence of each index in changeIndices last_occurrence = {} for s in range(m): idx = changeIndices[s] last_occurrence[idx] = s + 1 # 1-based seconds # Check if all indices have at least one occurrence in changeIndices for i in range(1, n+1): if i not in last_occurrence: return -1 # Binary search for the earliest second left, right = 1, m result = -1 while left <= right: mid = (left + right) // 2 # Check if it's possible to mark all indices by mid seconds possible = True # Create a list to track the required steps required = [0] * n # For each index, calculate the total steps needed for i in range(n): idx = i + 1 last = last_occurrence[idx] if last > mid: possible = False break # The number of decrements needed is nums[i] # We need to perform these decrements before the last occurrence # The total steps is nums[i] + 1 (marking) required[i] = nums[i] + 1 if not possible: left = mid + 1 continue # Now, sum all required steps and check if it's <= mid total_steps = sum(required) if total_steps <= mid: result = mid right = mid - 1 else: left = mid + 1 return result ``` |
[{"input": "[2, 2, 0]\n[2, 2, 2, 2, 3, 2, 2, 1]", "output": "8", "testtype": "functional"}, {"input": "[1, 3]\n[1, 1, 1, 2, 1, 1, 1]", "output": "6", "testtype": "functional"}, {"input": "[0, 1]\n[2, 2, 2]", "output": "-1", "testtype": "functional"}] |