""" LeetCode 解题模板 使用方法: 1. 在 Solution 类中实现你的算法 2. 在 if __name__ == "__main__" 中添加测试用例 3. 运行:python solution.py """ from typing import List class Solution: """ 示例:搜索插入位置 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。 如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 """ def searchInsert(self, nums: List[int], target: int) -> int: """ 搜索插入位置 Args: nums: 排序数组 target: 目标值 Returns: 目标值的索引,如果不存在则返回插入位置 """ left, right = 0, len(nums) - 1 while left <= right: mid = left + (right - left) // 2 if nums[mid] == target: return mid elif nums[mid] < target: left = mid + 1 else: right = mid - 1 return left def print_test_result(test_name: str, passed: bool): """打印测试结果""" status = "✓ 通过" if passed else "✗ 失败" print(f"{test_name}: {status}") def assert_equals(actual: int, expected: int) -> bool: """比较两个整数是否相等""" return actual == expected if __name__ == "__main__": solution = Solution() # 测试用例 1: 目标值存在于数组中 nums1 = [1, 3, 5, 6] target1 = 5 result1 = solution.searchInsert(nums1, target1) expected1 = 2 print_test_result("测试用例 1: 目标值存在", assert_equals(result1, expected1)) # 测试用例 2: 目标值不存在,应插入到中间位置 nums2 = [1, 3, 5, 6] target2 = 2 result2 = solution.searchInsert(nums2, target2) expected2 = 1 print_test_result("测试用例 2: 插入中间位置", assert_equals(result2, expected2)) # 测试用例 3: 目标值大于所有元素 nums3 = [1, 3, 5, 6] target3 = 7 result3 = solution.searchInsert(nums3, target3) expected3 = 4 print_test_result("测试用例 3: 插入末尾", assert_equals(result3, expected3)) # 测试用例 4: 目标值小于所有元素 nums4 = [1, 3, 5, 6] target4 = 0 result4 = solution.searchInsert(nums4, target4) expected4 = 0 print_test_result("测试用例 4: 插入开头", assert_equals(result4, expected4)) print("\n所有测试完成!")