首页 > 其他分享 >day6(day5休息) | 1. 两数之和; 202. 快乐数; 242. 有效的字母异位词; 349. 两个数组的集合

day6(day5休息) | 1. 两数之和; 202. 快乐数; 242. 有效的字母异位词; 349. 两个数组的集合

时间:2023-03-20 20:25:29浏览次数:37  
标签:202 return target nums day6 self int 哈希 两数

1. 两数之和

 

题目简述

 

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

 

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。

 

思路

1. 遍历列表,暴力枚举;从列表的第1个元素开始遍历,先确定第1个元素,然后再到后面的元素中找是否存在target-nums[i],如果存在,就返回下标,不存在,i加1继续找它后面是否存在target-nums[i]。直到遍历完为止。

 

代码如下

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        # 遍历列表
        for i in range(len(nums)):
            # 计算需要找到的下一个目标数字
            res = target-nums[i]
                # 遍历剩下的元素,查找是否存在该数字
            if res in nums[i+1:]:
                # 若存在,返回答案。这里由于是两数之和,可采用.index()方法
                # 获得目标元素在nums[i+1:]这个子数组中的索引后,还需加上i+1才是该元素在nums中的索引
return [i, nums[i+1:].index(res)+i+1]

 

 

2. 利用哈希表;

  1) 遍历nums中的x,看看哈希表中是否有target-x,没有的话,就把x存入哈希表

  2) 有的话,就输出target-x和x在哈希表中的值

 

代码如下

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        hashtable = dict()
        for i, num in enumerate(nums):
            if target - num in hashtable:
                return [hashtable[target - num], i]
            hashtable[nums[i]] = i
        return []

 

 

202. 快乐数

 

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

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

思路

 

1. 给一个数字n,确定他的下一个数字是什么。这要求我们按照题目要求做数位分离,求平方和。

2. 按照一系列数字来判断我们是否进入了循环。用哈希集合来实现,每次生成链中的下一个数字时,我们都会检查它是否已经在哈希集合中;如果在哈希集合,意味着处于循环,返回false;如果不在,则添加之。

 

代码如下

 

def isHappy(self, n: int) -> bool:

    def get_next(n):
        total_sum = 0
        while n > 0:
            n, digit = divmod(n, 10)
            total_sum += digit ** 2
        return total_sum

    seen = set()
    while n != 1 and n not in seen:
        seen.add(n)
        n = get_next(n)

    return n == 1

 

242. 有效的字母异位词

 

题目描述

 

给定两个字符串s和t,编写一个函数来判断t是否是s的字母异位词。

若s和t中每个字符出现的次数都相同,则称s和t互为字母异位次。

 

思路

 

1. 哈希映射

2. 首先判断两个字符串长度是否相等,不相等则直接返回 false

3. 若相等,则初始化 26 个字母哈希表,遍历字符串 s 和 t

4. s 负责在对应位置增加,t 负责在对应位置减少

5. 如果哈希表的值都为 0,则二者是字母异位词

 

代码如下

 

from collections import Counter, defaultdict

class Solution:
    def isAnagram(self, s: str, t: str) -> bool:
        if len(s) != len(t):
            return False

        record = [0] * 26

        for i in s:
            ss=ord(i)
            # 并不需要记住字符a的ASCII,只要求出一个相对数值就可以了
            record[ord(i) - ord('a')] += 1
        for j in t:
            record[ord(j) - ord('a')] -= 1

        for item in record:
            if item != 0:
                return False

        return True

 

 

349. 两个数组的集合

 

题目简述

 

给定两个数组 nums1 和 nums2 ,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。

 

思路

 

1. 定义两个哈希集合存储元素

2. 遍历较小的集合,判断其中的每个元素是否在另一个集合中,如果元素也在另一个集合中,则将该元素添加到返回值

 

代码如下

class Solution:
    def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:
        set1 = set(nums1)
        set2 = set(nums2)
        return self.set_intersection(set1, set2)

    def set_intersection(self, set1, set2):
        if len(set1) > len(set2):
            return self.set_intersection(set2, set1)
        return [x for x in set1 if x in set2]

 

标签:202,return,target,nums,day6,self,int,哈希,两数
From: https://www.cnblogs.com/cp1999/p/17237194.html

相关文章

  • [CVPR2020] RandLA-Net: Efficient Semantic Segmentation of Large-Scale Point Clou
    大佬的TensorFlow代码:here另一个大佬的Pytorch代码:等我看完代码再贴链接,之前那个不太行keywords高分辨率点云——约\(10^5\)点云语义分割多层次特征在正式开始......
  • 2022年度腾讯研发数据公布:70%的Bug在两天内解决
    3月20日,腾讯正式发布《2022年腾讯研发大数据报告》(以下简称《报告》)。《报告》由腾讯技术委员会出品,全面披露了2022年腾讯在研发投入、研发效能、开源协同等方面的重要数据......
  • Blender Apps?2023年最值得期待的 9 个 Blender 开发项目抢先看!
    2023年对Blender来说将会是很有趣的一年,除了努力保持核心功能稳定和不断迭代之外,几个可能会在今年实现且备受关注的功能开发项目已经开始!赶紧跟着​​云渲染​​小编一起......
  • b01lers CTF & WolvCTF 2023 部分Re WriteUp
    这周打了两个比赛,个人感觉b01lersCTF偏简单一些,WolvCTF比前者难一点。养生型选手,一共做了三个题b01lersCTFSafe一个嵌入式逆向的题目,是逆向ArduinoUNO一个门锁......
  • [NPUCTF2020]ezinclude 1
    [NPUCTF2020]ezinclude1F12查看源码<!--md5($secret.$name)===$pass-->然后以为是要搞MD5的新漏洞姿势,看来WP才发现,不是这样的,是相应包里面有MD5加密后的东西填到P......
  • Lightroom Classic 2022 for Mac(Lrc2022) 11.5中文激活版
    Lightroom Classic2022是一款桌面照片编辑和管理软件,照片后期处理软件,数码摄影师必备工具,主要面向数码摄影师、图形设计等专业人士和高端用户,以及所有喜好拍照、需要拍照......
  • 《2023大型企业财务数智化白皮书》:大型企业财务数智化建设应用架构
    2023年3月16日,用友在北京国家会计学院举办“智能会计价值财务”2023企业数智化财务创新峰会·北京站。会上,用友《大型企业财务数智化白皮书》重磅发布,其核心观点之一中强调......
  • [鹏城杯 2022]压缩包
    [鹏城杯2022]压缩包<?phphighlight_file(__FILE__);functionremovedir($dir){$list=scandir($dir);foreach($listas$value){if(is_file($di......
  • loj6144「2017 山东三轮集训 Day6」C
    loj6144「2017山东三轮集训Day6」C注意到修改只有位运算,容易想到将位拆开考虑。首先可以发现对某一位或上\(0\)或者是对某一位与上\(1\)是没有意义的,相当于没有操作......
  • 2023/3/20 停课日寄
    大约2:00到机房,就开始打树剖。然后就一直在调P6098,56pts。调不出来找hhx求助,hhx告诉我使用树状数组并向我推销了一番他的blog,结果树状数组更是连样例都没过。3:10......