查找算法
重点阐述二分查找、杨氏矩阵查找、查找出现次数超过一半的数以及字符串匹配算法。
1.有序数组的查找
给定一个排好序的数组,查找某个数是否在这个数组中, 请编程实现。
既然是有序数组,显而易见的想到使用二分查找。
以下是一份python参考实现:
def binarySearch(list_a, n, value):
left = 0
right = n-1
while left <= right:
middle = (left + right)/2
if list_a[middle] == value:
return middle
elif list_a[middle] > value:
right = middle-1
else:
left = middle+1
return -12.行列递增矩阵的查找
在一个m行n列的二维数组中,每一行都按照从左到右递增的顺序排列,每一列都按照从上到下的顺序排列。
现输入这样的一个二维数组和一个整数,请完成一个函数,判断数组中是否含有该函数。
def youngMatrix(matrix, value):
if matrix == []:
return False
m = len(matrix)
n = len(matrix[0])
x = 0
y = n-1
while x <= m-1 and y >= 0:
if matrix[x][y] == value:
return True
elif matrix[x][y] > value:
y -= 1
else:
x += 1
return False3.出现次数超过一半的数
数组中有一个数出现的次数超过了数组长度的一半,找出这个数。
如果数组是无序的,可以使用堆栈每次删除两个不同的数,或是记录两个值的方法,或者直接使用快速排序使数列转化成有序。
如果数组本身是有序的,那么直接输出第n/2处的值即可。
def find_one_number(list_a, length):
candidate = list_a[0]
times = 1
for i in range(1, length):
if times == 0:
candidate = list_a[i]
times = 1
else:
if list_a[i] == candidate:
times += 1
else:
times -= 1
return candidate4.字符串的查找
假设现在有这样一个问题,有一个文本串S和一个模式串P,要查找P在S中的位置该怎么做?
最经典的就是KMP算法。不过这里先介绍最容易理解的蛮力匹配方法。
def violence_match(str_s, str_p):
len_p = len(str_p)
len_s = len(str_s)
i = 0
j =while i < len_s and j < len_p:
if str_s[i] == str_p[j]:
i += 1
j += 1
else:
i = i-j+1
j =if j == len_p:
return i - j
else:
return -1 相关推荐
bluewelkin 2020-04-09
koushr 2020-11-12
faiculty 2020-08-20
数据与算法之美 2020-07-04
xhao 2020-06-29
wuxiaosi0 2020-06-28
路漫 2020-06-28
数据与算法之美 2020-06-28
田有朋 2020-06-28
xhao 2020-06-28
natloc 2020-06-27
leoaran 2020-06-22
算法改变人生 2020-06-09
nurvnurv 2020-06-07
shenwenjie 2020-06-04
Tips 2020-06-03
只能做防骑 2020-06-01