📅  最后修改于: 2023-12-03 14:55:09.812000             🧑  作者: Mango
时间复杂度是算法分析的重要概念,指算法执行所需要的计算资源,常用大O符号表示。在实际编程中,对算法的时间复杂度进行分析,能够帮助程序员提高代码的效率,节省运行时间和资源消耗,提高程序性能。
本篇文章将提供一些练习题,旨在帮助程序员熟练掌握时间复杂度的计算方法和技巧,为写出高效的程序奠定坚实的基础。
def find_two_smallest_numbers(numbers):
smallest = second_smallest = float('inf')
for number in numbers:
if number < smallest:
second_smallest = smallest
smallest = number
elif number < second_smallest:
second_smallest = number
return smallest, second_smallest
时间复杂度:
该算法的时间复杂度为O(n)。
分析:
该算法对数组进行了一次线性扫描。为O(n)时间复杂度。
def move_zeros_to_end(numbers):
non_zeros = [number for number in numbers if number != 0]
zeros = [0] * (len(numbers) - len(non_zeros))
return non_zeros + zeros
时间复杂度:
该算法的时间复杂度为O(n)。
分析:
该算法对数组进行了一次线性扫描,并生成两个新数组。时间复杂度为O(n)。
def count_number_occurrences(numbers, target_number):
left_index = 0
right_index = len(numbers) - 1
count = 0
while left_index <= right_index:
mid_index = (left_index + right_index) // 2
if numbers[mid_index] == target_number:
count += 1
i = j = mid_index
while i > 0 and numbers[i - 1] == target_number:
count += 1
i -= 1
while j < len(numbers) - 1 and numbers[j + 1] == target_number:
count += 1
j += 1
break
elif numbers[mid_index] > target_number:
right_index = mid_index - 1
else:
left_index = mid_index + 1
return count
时间复杂度:
该算法的时间复杂度为O(logn)。
分析:
该算法是二分查找法的变体,使用二分查找法找到目标数在数组中的位置,再以该位置为起点分别向左右扫描,统计目标数的出现次数。时间复杂度为O(logn),最坏情况下需要进行O(logn)次查找,比线性扫描的O(n)更优秀。