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

代码随想录算法训练营第六天 | 242. 有效的字母异位词、349. 两个数组的交集、202. 快乐数、1. 两数之和

242. 有效的字母异位词

哈希表有最大长度26,直接使用数组做哈希。

class Solution:
    def isAnagram(self, s: str, t: str) -> bool:
        record = [0 for i in range(26)]

        for char in s:
            record[ord(char)-ord('a')] += 1
        for char in t:
            record[ord(char)-ord('a')] -= 1
        
        return not any(record)

349. 两个数组的交集

这题python其实很好AC一行就可以了..

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

学一下别人的写法:

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]

定义交集函数让set1总是更小的可以优化性能。

202. 快乐数

 建一个集合用于记录目前为止的各位平方和,如果等于1说明是快乐数,否则一旦发现重复了直接报告Flase.

class Solution:
    def isHappy(self, n: int) -> bool:
        record = set()

        while True:
            record.add(n)
            n = sum([int(x) ** 2 for x in str(n)])
            if n == 1:
                return True
            if n in record:
                return False

1. 两数之和

每次做这一题都需要打开评论查看一下"有人相爱,有人夜里开车看海,有人leetcode第一题都做不出来。"

言归正传,建一个哈希表,key放数值,value放对应的索引。每次循环查target-num键是否在哈希表中,如果在报告结果。否则把当前num存入哈希表,值为对应的索引。

from collections import defaultdict
class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        record = defaultdict(int)
        for i,num in enumerate(nums):
            if target - num in record:
                return [i, record[target - num]]
            record[num] = i
        return []
            

这里再写一个双指针实现,为后续的三数之和、四数之和做准备。

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        sorted_nums = sorted(nums)
        left, right = 0, len(nums) - 1
        while left < right:
            if sorted_nums[left] + sorted_nums[right] == target:
                left_index = nums.index(sorted_nums[left])
                right_index =  nums.index(sorted_nums[right])
                return [left_index, nums[left_index + 1:].index(sorted_nums[left]) + left_index + 1] if sorted_nums[left] == sorted_nums[right] else [left_index, right_index]
            elif sorted_nums[left] + sorted_nums[right] < target:
                left += 1
            else:
                right -= 1


http://www.kler.cn/a/459174.html

相关文章:

  • PHP在做api开发中,RSA加密签名算法如何使用 ?
  • C/C++在鸿蒙系统中主要用于硬件开发和系统级编程
  • Java 数据库连接 - Sqlite
  • 学习路之VScode--自定义按键写注释(插件)
  • 如何利用 ClickHouse 实现高级分析:MySQL 到 ClickHouse 实时数据同步指南
  • golang 编程规范 - 项目目录结构
  • 如何利用无线路由器实现水泵房远程监测管理
  • 关于科研工具的思考
  • 企业能源物联网数据采集设备
  • WOFOST作物模型(3):敏感性分析
  • 学习鸿蒙第一天
  • shell指令操作
  • 机器学习之逻辑回归算法、数据标准化处理及数据预测和数据的分类结果报告
  • 【VBA】EXCEL - VBA 创建 Sheet 表的 6 种方法,以及注意事项
  • pycharm如何运行js代码详细图文教程
  • Qt/C++案例 记录创建并加载动态链接库修改exe/dll类型文件的版本信息的示例
  • 云手机:Instagram 矩阵搭建方案
  • MySQL什么情况下会加间隙锁?
  • 使用 AI Cursor 编程实现一个小产品 Chrome 扩展插件 MVP 功能
  • 阿里云 ECS 服务器绑定多个公网IP
  • 程序员转行室内设计师(软装设计流程)
  • 打卡算法题:155. 最小栈 --- 从193ms 到 4 ms的优化
  • linux装git
  • 基于 kubesphere + cube-studio搭建一站式云原生机器学习平台 国产纯中文 实操记录
  • 【遗传算法简介】
  • 太速科技-519-基于ZU19EG的4路100G光纤的PCIe 加速计算卡