关于算法与数据结构
算法(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方法原理及应用
- 可迭代对象?