力扣刷题记录&整理——(一)Arrays & Hashing


前言

整理力扣刷题思路。

  • 语言:python3
  • 题库:来自neetcode: link

一、预备知识

1.哈希表

定义

哈希表(Hash Table)是一种常见的数据结构,它提供了快速的数据检索能力。哈希表的核心是哈希函数,它负责将输入(通常是键值)映射到一个索引上,这个索引直接用于访问数据存储数组中的位置。

链接: link


二、解题思路

1.哈希表

217.contains-duplicate

给你一个整数数组 nums 。如果任一值在数组中出现至少两次,返回 true ;如果数组中每个元素互不相同,返回 false 。

class Solution:
    def containsDuplicate(self, nums: List[int]) -> bool:
        hashset=set()
        for n in nums:
            if n in hashset:
                return True
            hashset.add(n)
        return False

1.two sum

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

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

你可以按任意顺序返回答案。

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

49.group anagrams

给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。

字母异位词 是由重新排列源单词的所有字母得到的一个新单词。

class Solution:
    def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
        premap = {}

        for s in strs:
            key = ''.join(sorted(s))
            if key in premap:
                premap[key].append(s)
            else:
                premap[key] = [s]
         
        return list(premap.values())

2.前缀后缀和

238.product-of-array-except-self

给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。

题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。

请 不要使用除法,且在 O(n) 时间复杂度内完成此题。

class Solution:
    def productExceptSelf(self, nums: List[int]) -> List[int]:
        ans, tmp = [1] * len(nums), 1
        for i in range(1, len(nums)):
            ans[i] = ans[i - 1] * nums[i - 1] # 下三角
        for i in range(len(nums) - 2, -1, -1):
            tmp *= nums[i + 1]                # 上三角
            ans[i] *= tmp                     # 下三角 * 上三角
        return ans

注:这一题换成求和不使用减法,也可以采用相似的解决方式。
链接: link

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值