当前位置: 首页 > news >正文

蓝桥杯备赛-基础训练(三)哈希表 day15

两个数组的交集

题意:

给定两个数组,编写一个函数来计算它们的交集。

示例:

说明: 输出结果中的每个元素一定是唯一的。 我们可以不考虑输出结果的顺序。

思路:

首先我们应该分析题意,这里是不看重复的数字的,所以如果使用set,可以很好的实现去重的情况,同时,若存储的值可能很大,数组的下标是比较有限制的,并且如果用很大的下标,就会浪费很多的存储空间,那么使用数组就不太合理了。

set使用条件:

要求没有重复数字的时候

下标极大,没有极限的时候

我们这里使用的是unordered set(已经帮我们做去重了),

因为这种形式的set做映射和取值的时候效率都最高

代码:

直接使用集合:

from typing import List
# 两个数组的交集
class jiaoji:
    def find_xiangtong(self,nums1: List[int], nums2: List[int]) -> List[int]:
        return list(set(nums1) & set(nums2))

nums1 = [1,2,3,4,3,3,12,2]
nums2 = [1,4,32,11,23,3,3,222]

inst = jiaoji()
list_1 = inst.find_xiangtong(nums1,nums2)
print(nums1)
print(nums2)
print(list_1)

使用数组:

from typing import List
#若使用数组
class find_shuzu:
    def shuzu(self,nums:List[int],nums1:List[int])->None:
        count1 = [0]*1001
        count2 = [0]*1001
        result = [0]*100
        for i in range(len(nums)):
            count1 [nums[i]-1]+=1

        for j in range(len(nums1)):
            count2 [nums1[j]-1]+=1

        if len(nums)<len(nums1):
            a = len(nums)
        else:
            a = len(nums1)

        for i in range(0,a):
            if count1[i]*count2[i] !=0:
                result[i]=1
        print(result)

nums1 = [1,2,3,4,3,3,12,2]
nums2 = [1,4,32,11,23,3,3,222]

inst1 = find_shuzu()
inst1.shuzu(nums1,nums2)

快乐数

题意:

编写一个算法来判断一个数 n 是不是快乐数。

「快乐数」定义为:

对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果 可以变为  1,那么这个数就是快乐数。

如果 n 是快乐数就返回 True ;不是,则返回 False 。

示例:

输入:19
输出:true
解释:
1^2 + 9^2 = 82
8^2 + 2^2 = 68
6^2 + 8^2 = 100
1^2 + 0^2 + 0^2 = 1

思路:

这道题目看上去貌似一道数学问题,其实并不是!

题目中说了会 无限循环,那么也就是说求和的过程中,sum会重复出现,这对解题很重要!

我还是希望作为小白来说,大家对代码的掌控力能提高,并且可以快速的写出代码

在这里就用个最简单的办法吧:

x = int(input("希望证明的数:"))

sum = 0
x_he = 0
judge = 1
while judge!=0:
    sum = sum+(x%10)*(x%10)
    x_he = x_he+x%10
    x = x/10
    if x<10:
        sum = sum+(x%10)*(x%10)
        x_he = x_he + x % 10
        judge = 0
if sum == x_he:
    print("是快乐数")
else:
    print("不是快乐数")

代码思路很简单,大家看代码就好啦

两数之和

题意:

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。

示例:

给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9

所以返回 [0, 1]

思路:

1、暴力算法:

两个循环解决问题

2、哈希法:

为啥我们会想到哈希法呢?

每当我们要判断这元素是否出现过or这个元素在集合中是否出现过的时候

我们的第一反应就是哈希法

那么和我一样的小白朋友们是不是会疑惑,怎么用哈希法呢?

比如我们现在找到的元素是3,如果求和要求9,

那么我们是不是应该思考:6是否出现过了呢?

如果6在这个集合里面出现过了,那么就可以认为这是一组合适的数字了

在实现代码之前,我们需要考虑,到底要使用哪种数据结构呢?

map是最合适的数据结构,为什么呢?

因为map在python当中的实现很多都相当于使用字典。

字典是有值和键的,如何检测哪些数字可以构成和呢?

为了更好的说明,我们看下图:

接下来我们实现代码:

代码:
# 哈希表实现两数之和
s = input("请输入数组中每个位置的值,以空格为分隔:")
sum = int(input("请输入求和的值:"))

arr = list(map(int,s.split( )))
l = len(arr)
result_dic = dict()# 定义一个字典
# 把数组中的值作为键,把数组的下标作为值
# result_dic = {num:index for index,num in enumerate(arr)}
# print(result_dic)
# 我们在这里换一种方法

for index,value in enumerate(arr):
    if sum-value in result_dic:
        print(f"[{result_dic[sum-value]},{index}]")
    result_dic[value]=index

相关文章:

  • 特征提取:如何从不同模态中获取有效信息?
  • 中兴B863AV3.2-T/B863AV3.1-T2/B863AV3.1-T2K_电信高安_S905L3A-B_安卓9.0_线刷固件包
  • Python进行简单医学影像分析的示例
  • LLM Agent:PaSa
  • ipad连接电脑断断续续,不断弹窗的解决办法
  • 计算机专业知识【Excel 引用大揭秘:相对、绝对与混合引用】
  • 抓包工具(三)Wireshark代理抓包Java程序的HTTPS请求
  • 编程考古-忘掉它,Delphi 8 for the Microsoft .NET Framework
  • 城市地质调查信息化建设,数字化时代的城市规划利器
  • C#DevExpress使用GridLookUpEdit实现订单明细选择商品
  • 大数据之常用Linux操作
  • 内外网文件传输 安全、可控、便捷的跨网数据传输方案
  • 商业航天级微控制器单元(MCU)技术特征分析
  • 微服务框架及其中出现的各种问题和对应的解决方案/组件
  • element ui的time时间和table表格
  • Windows逆向工程入门之结构体类特性分析
  • 放大镜案例
  • 2025软件测试面试题200问(含答案+文档)
  • CSDN如何设置付费专栏
  • 微服务环境搭建架构介绍(附超清图解源代码)
  • 市自规局公告收回新校区建设用地,宿迁学院:需变更建设主体
  • 中国以优化营商环境为支点,为全球企业提供可预期市场环境
  • 习近平出席俄罗斯总统举行的欢迎仪式
  • 吴清:全力支持中央汇金公司发挥好类“平准基金”作用
  • 前瞻|中俄元首今年将首次面对面会晤,专家:国际变局中构建更坚韧的合作架构
  • 无人机穿越大理崇圣寺千年古塔时“炸机”,当地:肇事者已找到,将被追责