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所有测试完成!")
|
||
|