92 lines
2.5 KiB
Python
92 lines
2.5 KiB
Python
|
|
"""
|
|||
|
|
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所有测试完成!")
|
|||
|
|
|