算法入门推荐:《算法图解》
介绍一本关于算法基础的入门级书籍,对于非科班出身的人来说,算法和数据结构的补充还是很有必要的,但是这些东西往往又是很枯燥以致于打消了很多人的积极性,《算法图解》用python为编程语言,对于一些基础性的算法介绍可以说很通俗易懂了,真的很适合入门,同时这篇文章我也结合了一些校招题目来进行一定程度的扩充,有一些用到了C++。
一、二分查找(O(log n))
def binary_search(list,item):
low = 0;
high = len(list)-1
while low <= high :
mid = int((low+high)/2)
guess =list[mid]
if guess == item:
return mid
if guess < item:
low = mid+1
else:
high=mid-1
return None
my_list =[1,3,5,7,9]
print (binary_search(my_list,5))
print (binary_search(my_list,-1))
输出结果:
2
None
二分查找的考查有很多,例如有一年字节跳动的编程题就是用到了这个方法:
问题描述:
总共有n条长度不等的绳子,可以任意切割,不能拼接,要求切割后得到m条长度相等的绳子,求问得到的这些长度相等的绳子的长度最大值L。
输入: 绳子的条数n;n条绳子的长度;要求切成的绳子数量m
输出:切割成相同长度的m条绳子的最大的长度
思路解析:
这道题其实就是二分查找的题目,区别于动态规划(在接下来的那个板块我会讲到也是割绳子的另一道题),因为我们知道最长长度的绳子,可以确定最终将剪成的长度只能在0到这个数中间,我们对这个范围进行二分查找,然后对得到的guess值,我们构造一个函数来判断是否符合要求,这个函数就是遍历所有绳子算出能剪出多少段这样长度的绳子,这个数量大于m则说明短了,这个数量小于m则说明长了,这样的二分查找还是挺清晰的。
N = input()
N=int (N)
max_len = 0.0
min_len = 0.0
num={
}
for i in range