Python算法(CCF-CSP考试)——哈希算法,两个数的和,单词模式匹配,bulls and cows,神奇的词根

本文深入探讨哈希算法在解决实际问题中的应用,包括两数之和、单词模式匹配、猜词游戏及词根替换等问题,展示哈希算法在提高搜索效率、减少遍历长度方面的优势。

哈希算法:
比较
常见的数据查找算法,如顺序查找(最简单,效率低),二分查找(效率高,要求数据有序),深度优先广度优先搜索(对于大数据量查找效率不高),哈希算法(查找快,查询插入删除等简单)

存储
预先设置一个长度M的数组,使用哈希函数F并以数据关键字为自变量,得到唯一返回值(0~M-1)。

下图1

哈希冲突
链地址法,有N个哈希地址就有N个链表,数组Hash存放每个链表头指针

下图2

问题一:两个数的和
如给定五个数字:3,4,5,7,10。选择两个数和为N,保证有且只有一个答案

如选择两个数,和为11

解法一:
普通解法:数组排序,left和right指针分别指向第一个元素和最后一个元素,如果两个数和恰好与目标相等,则输出;若和较小,则left向右移(增大);若较大,right向左移

nums = [3, 4, 5, 7, 10]
def twoSum(nums, target):
    res = []  # 存放结果编号
    newnums = nums.copy()   
    newnums.sort()  # 排序
    left = 0   # 左指针
    right = len(newnums) - 1   # 右指针
 
    while left < right:    
        if newnums[left] + newnums[right] == target:    # 相等
            for i in range(len(newnums)):    # 储存left下标
                if nums[i] == newnums[left]:
                    res.append(i)
                    break
            for i in range(len(newnums)-1, -1, -1):   # right
                if nums[i] == newnums[right]:
                    res.append(i)
     &

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值