Leetcode刷题(一)

本文介绍了算法与数据结构的基本概念,重点剖析了两数之和问题的暴力搜索和哈希表解决方案,数组串联的高效实现,以及宝石与石头问题的简洁代码。讨论了hash方法、可迭代对象的应用,并提供了关键知识点总结。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于算法与数据结构

算法(Algorithm),就是解决问题的过程或者方法;
数据结构(Data Structure),是数据的计算机表示和相应的一组操作;

关于我对算法和数据结构的理解,算法偏向于方式,而数据结构是实现方式的一种工具,同一个问题可以由多种算法(方式)来解决,一种算法也可以包含多种数据结构(工具)。

算法复杂度

在资源有限的条件下,当然追求的是运行时间和空间上的双重高效,在算法中,时间就代表时间复杂度,空间则是空间复杂度。

求解:两数之和

第一时间想到的就是暴力搜索法,利用两重循环暴力搜索,时间复杂度为O(n^2),看到官方题解还有哈希表法,值得学习思考一下:

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 []
  • **enumerate(nums)**使用将列表转化为索引数列;
  • 然后采用hash表查询是否存在 target - x

求解:数组串联

问题描述:ans由两个 nums 数组串联形成。

  • 使用 extend()函数:用于在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)。
    省时省力!

求解:宝石与石头

问题描述:字符串(子) jewels 和字符串(主) stones,求 jewels 里面的字符一共在 stones 中出现几次。附上官方代码,记录下简洁的表达方式,自己写的很冗杂。

def numJewelsInStones(self, jewels: str, stones: str) -> int:
        return sum(s in jewels for s in stones)

-自己用到了如下 字符串.count(字符) ,没想到可以直接使用字符遍历,并对出现次数求和。

for i in jewels:
            a = stones.count(i)
  • **可迭代对象:**去看了sum(iterable[, start])方法描述,其中 iterable 指的是可迭代对象,如:列表、元组、集合。但是有如何判断元素是可迭代对象呢,找到了如下判断方法:
from collections import Iterable#载入模块
isinstance('abc',Iterable) #字符串是可迭代对象吗?
True

问题总结:

  • hash方法原理及应用
  • 可迭代对象?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ansheng1314

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值