Appearance
分解代码提高可读性的优点
清晰易懂、便于调试、增强复用性、提升维护性、便于协作、符合规范。
能帮助你编写高质量的示例代码,同时让学习者和维护者受益。
实现题目
给定一个非递减整数数组,和一个 target,要求你找到数组中最小的一个数 x,可以满足 x*x > target。一旦不存在,则返回 -1。
数组: [1, 3, 5, 7, 9, 11, 13, 15]
target:9
输出是 5
未分解写法
Python
def solve(arr, target):
l, r = 0, len(arr) - 1
ret = -1
while l <= r:
m = (l + r) // 2
if arr[m] * arr[m] > target:
ret = m
r = m - 1
else:
l = m + 1
if ret == -1:
return -1
else:
return arr[ret]
print(solve([1, 3, 5, 7, 9, 11, 13, 15], 9))
#####输出#####
5分解写法
Python
def comp(x, target):
"""
核心判断
"""
return x * x > target
def binary_search(arr, target):
"""
在非递减整数数组中查找目标元素,返回其索引。
如果未找到,返回 -1。
参数:
arr: 非递减整数数组
target: 要查找的目标值
返回:
目标索引或 -1
"""
l, r = 0, len(arr) - 1
ret = -1
while l <= r:
m = (l + r) // 2
if comp(arr[m], target):
ret = m
r = m - 1
else:
l = m + 1
return ret
def solve(arr, target):
"""
给定一个非递减整数数组,和一个 target;
要求你找到数组中最小的一个数 x,可以满足 x*x > target。
一旦不存在,则返回 -1。
"""
index = binary_search(arr, target)
if index != -1:
return arr[index]
return -1
print(solve([1, 3, 5, 7, 9, 11, 13, 15], 9))
#####输出#####
5可读性对比
分解写法,做了以下优化,提高代码可读性。
- 将函数拆分,让每个函数,专注做一件事
- 添加注释,便于后续代码维护
