博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
查找算法
阅读量:4680 次
发布时间:2019-06-09

本文共 1732 字,大约阅读时间需要 5 分钟。

重点阐述二分查找、杨氏矩阵查找、查找出现次数超过一半的数以及字符串匹配算法。

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 -1

 

2.行列递增矩阵的查找

在一个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 False

 

3.出现次数超过一半的数

 

数组中有一个数出现的次数超过了数组长度的一半,找出这个数。

如果数组是无序的,可以使用堆栈每次删除两个不同的数,或是记录两个值的方法,或者直接使用快速排序使数列转化成有序。

如果数组本身是有序的,那么直接输出第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 candidate

4.字符串的查找

假设现在有这样一个问题,有一个文本串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 = 0    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 = 0    if j == len_p:        return i - j    else:        return -1

 

转载于:https://www.cnblogs.com/tsxh/p/8810649.html

你可能感兴趣的文章
NABCD分析
查看>>
input实时监听
查看>>
Maven学习:常用mvn命令
查看>>
C#垃圾回收机制
查看>>
web项目部署到Tomcat服务器的三种方式
查看>>
P1962 斐波那契数列-题解(矩阵乘法扩展)
查看>>
Kibana6.x.x源码分析--Error: $injector:nomod Module Unavailable
查看>>
周围区域问题
查看>>
31、任务三十一——表单联动
查看>>
[ios] IOS文件操作的两种方式:NSFileManager操作和流操作【转】
查看>>
Jenkins之Linux和window配置区别
查看>>
python之hasattr、getattr和setattr函数
查看>>
maven使用阿里镜像配置文件
查看>>
Java之字符流操作-复制文件
查看>>
你好,React setState
查看>>
JS简单表单验证
查看>>
C# 和 c++的语法不同点
查看>>
jquery blockUI 扩展插件 Dialog
查看>>
第一次去CSDN听课感受
查看>>
iOS开发UI篇—实现一个私人通讯录小应用(二)
查看>>