数据结构
逻辑结构
- 集合结构:无序的,仅由类似特性的元素共同组成
- 线性结构:一对一的,数据由一个数据引出,同时最多导向一个数据
- 树形结构:一对多的,有层次的
- 图形结构:多对多的,由节点构成的,各个节点之间可能都会有关系
物理结构
- 顺序存储:放在一块连续的内存里面,像数组那样,方便易得,但是不易进行修改插入操作
- 链式存储:将数据放在任意的存储单元里,这些数据有可能相邻,也有可能不,可以方便的进行管理与修改,但是指针和内存空间都会需要空间,可能会比顺序存储大
算法
算法的基本特性
输入、输出、有穷性、确定性、可行性。
算法追求的目标
正确性
可读性
健壮性
所需运行时间更少(时间复杂度更低)
占用内存空间更小(空间复杂度更低)
算法效率的度量方法
_事后统计法
_事前分析估算法
一个程序的运行时间,依赖与算法的好坏和问题的输入规模
问题的输入规模:输入量的多少
T1. 两数之和
思路1:枚举法
class Solution:
def twoSum(self, nums:List[int], target:int) -> List[int]:
for i in range(len(nums)):
for j in range(i+1,len(nums)):
if i != j and nums[i]+nums[j]==target:
return [i,j]
return[]
思路2:哈希表
class Solution:
def twoSum(self, nums:List[int], target:int) -> List[int]:
numDict=dict()
for i in range(len(nums)):
if target-nums[i] in numDict:
return numDict[target-nums[i]],i
numDict[nums[i]]=i
return [0]
练习
T2235
class Solution:
def sum(self, num1: int, num2: int) -> int:
return num1 + num2
T1929
class Solution:
def getConcatenation(self, nums: List[int]) -> List[int]:
return nums + nums
T0771
class Solution:
def numJewelsInStones(self, jewels: str, stones: str) -> int:
jewel_dict=dict()
for jewel in jewels:
jewel_dict[jewel]=1
count=0
for stone in stones:
if stone in jewel_dict:
count+=1
return count
T1480
class Solution:
def runningSum(self, nums: List[int]) -> List[int]:
output = []
temp = 0
for i in nums:
output.append(i + temp)
temp += i
return output
T0709
思路1:直接模式
class Solution:
def toLowerCase(self, s: str) -> str:
ans=""
for ch in s:
if ord('A')<=ord(ch)<=ord('Z'):
ans += chr(ord(ch)+32)
else:
ans += ch
return ans
思路2:使用API
Python 语言中自带大写字母转小写字母的 API:lower()
,用 API 转换完成之后,直接返回新的字符串。
class Solution:
def toLowerCase(self, s: str) -> str:
return s.lower()
T1672
class Solution:
def maximumWealth(self, accounts: List[List[int]]) -> int:
max_ans=0
for i in range(len(accounts)):
total=0
for j in range(len(accounts[i])):
total += accounts[i][j]
if total>max_ans:
max_ans=total
return max_ans