查找1 | Leetcode分类练习 | Datawhale- 打卡(三)

35. 搜索插入位置

  • 题目

    给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
    你可以假设数组中无重复元素。

  • 代码

    class Solution:
        def searchInsert(self, nums: List[int], target: int) -> int:
            start,end=0,len(nums)
            while start < end:
                mid = (start+end)//2
                if nums[mid] < target:
                    start = mid + 1
                else:
                    end = mid
            return start
    

202. 快乐数

  • 题目

    编写一个算法来判断一个数 n 是不是快乐数。
    「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果 可以变为  1,那么这个数就是快乐数。
    如果 n 是快乐数就返回 True ;不是,则返回 False 。

  • 代码

    class Solution:
        def isHappy(self, n: int) -> bool:
            sum_set = set()
            while n != 1:
                mysum = 0
                while n >0:
                    mysum += (n%10)**2
                    n = n//10
                if mysum in sum_set:
                    return False
                else:
                    sum_set.add(mysum)
                n = mysum
            return True
    

205. 同构字符串

  • 题目

    给定两个字符串 s 和 t,判断它们是否是同构的。
    如果 s 中的字符可以被替换得到 t ,那么这两个字符串是同构的。
    所有出现的字符都必须用另一个字符替换,同时保留字符的顺序。两个字符不能映射到同一个字符上,但字符可以映射自己本身。

  • 代码

    class Solution:
        def isIsomorphic(self, s: str, t: str) -> bool:
            return list(map(s.index,s))==list(map(t.index,t))
    

242. 有效的字母异位词

  • 题目

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

  • 代码

    class Solution:
        def isAnagram(self, s: str, t: str) -> bool:
            from collections import Counter
            s = Counter(s)
            t = Counter(t)
            if s == t:
                return True
            else:
                return False
    

290. 单词规律

  • 题目

    给定一种规律 pattern 和一个字符串 str ,判断 str 是否遵循相同的规律。
    这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 str 中的每个非空单词之间存在着双向连接的对应规律。

  • 代码

    class Solution:
        def wordPattern(self, pattern: str, str: str) -> bool:
            str = str.split()
            return list(map(pattern.index,pattern)) == list(map(str.index,str))
    

349. 两个数组的交集

  • 题目

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

  • 代码

    class Solution:
        def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:
            return set(nums1) & set(nums2)
    

350. 两个数组的交集 II

  • 题目

    给定两个数组,编写一个函数来计算它们的交集。
    说明:输出结果中每个元素出现的次数,应与元素在两个数组中出现次数的最小值一致。

  • 代码

    class Solution:
        def intersect(self, nums1: List[int], nums2: List[int]) -> List[int]:
            from collections import Counter
            nums1_dict = Counter(nums1)
            res = []
            for i in nums2:
                if nums1_dict[i] > 0:
                    res.append(i)
                    nums1_dict[i] -= 1
            return res  
    

410. 分割数组的最大值

  • 题目

    给定一个非负整数数组和一个整数 m,你需要将这个数组分成 m 个非空的连续子数组。设计一个算法使得这 m 个子数组各自和的最大值最小。

  • 代码

    class Solution:
        def splitArray(self, nums: List[int], m: int) -> int:
            def helper(mid):
                res = tmp = 0
                for num in nums:
                    if tmp + num <= mid:
                        tmp += num
                    else:
                        res += 1
                        tmp = num
                return res + 1
    
            lo, hi = max(nums), sum(nums)
            while lo < hi:
                mid = (lo + hi) // 2
                if helper(mid) > m:
                    lo = mid + 1
                else:
                    hi = mid
            return lo
    

451. 根据字符出现频率排序

  • 题目

    给定一个字符串,请将字符串里的字符按照出现的频率降序排列。

  • 代码

    class Solution:
        def frequencySort(self, s: str) -> str:
            from collections import Counter
            s_dic = Counter(s)
            s = sorted(s_dic.items(), key=lambda item:item[1], reverse = True)
            res = ''
            for key, value in s:
                res += key * value   
            return res
    

540. 有序数组中的单一元素

  • 题目

    给定一个只包含整数的有序数组,每个元素都会出现两次,唯有一个数只会出现一次,找出这个数。

  • 代码

    class Solution:
        def singleNonDuplicate(self, nums: List[int]) -> int:
            left,right = 0,len(nums)-1
            while left < right:
                mid = (left+right) // 2
                if nums[mid] == nums[mid^1]:
                    left = mid + 1
                else:
                    right = mid
            return nums[left]
    

参考:https://github.com/datawhalechina/team-learning-program/blob/master/LeetCodeClassification/3.查找.md

posted @   柔南青空  阅读(129)  评论(0编辑  收藏  举报
编辑推荐:
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
阅读排行:
· Sdcb Chats 技术博客:数据库 ID 选型的曲折之路 - 从 Guid 到自增 ID,再到
· 语音处理 开源项目 EchoSharp
· 《HelloGitHub》第 106 期
· Spring AI + Ollama 实现 deepseek-r1 的API服务和调用
· 使用 Dify + LLM 构建精确任务处理应用
点击右上角即可分享
微信分享提示