基础
class Solution:
def removeDuplicates(self, nums: List[int]) -> int:
是新增的语法,为了说明参数和返回值的数据类型。不过仅仅的给人看的,实际上程序并不检查是否是相符的。
LC【删除排序数组中的重复项】
while nums[n]==nums[n+1]:
nums.pop(n+1)
.pop() 剔除重复的第二项
LC【买卖股票的最佳时机 II】
设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
贪心算法(greedy algorithm), 一种在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是最好或最优的。贪心算法在有最优子结构的问题中尤为有效。最优子结构的意思是局部最优解能决定全局最优解。简单地说,问题能够分解成子问题来解决,子问题的最优解能递推到最终问题的最优解。贪心算法与动态规则的不同在于它对每个子问题的解决方案都做出选择,不能回退。动态规划则会保存以前的运算结果,并根据以前的结果对当前进行选择,有回退功能。贪心算法在数据科学领域被广泛应用,特别是金融工程。其中一个贪心算法例子就是Ensemble method。
最小生成树的算法如Prim算法、Kruskal算法均为贪心算法,其中Prim算法是对图上的节点贪心,而Kruskal算法是对图上的边贪心。边贪心。
时间复杂度:
res += max(prices[i]-prices[i-1], 0)
LC【旋转数组】
方法一:
class Solution:
def rotate(self, nums: List[int], k: int) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
n=len(nums)
for i in range (0,k):
nums.insert(0,nums[-1])
nums.pop()
以上的两步可以简写为 nums.insert(0, nums.pop())
方法二:
class Solution:
def rotate(self, nums: List[int], k: int) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
n=len(nums)
k%=n
if k==0:
pass
else:
nums[:]=nums[-k:]+nums[0:n-k]
LC【存在重复元素】
#用set去重,判断数组长度是否一致
class Solution:
def containsDuplicate(self, nums: List[int]) -> bool:
return len(nums) != len(set(nums))
LC【只出现一次的数字】
Python count() 方法用于统计字符串里某个字符出现的次数。可选参数为在字符串搜索的开始与结束位置。count()方法语法:
str.count(sub, start= 0,end=len(string))
散列表( Hash table,也叫 哈希表),是根据键(Key)而直接访问在内存储存位置的数据结构。也就是说,它通过计算一个关于键值的函数,将所需查询的数据映射到表中一个位置来访问记录,这加快了查找速度。这个映射函数称做散列函数,存放记录的数组称做 散列表。
若关键字为k,则其值存放在f(k)的存储位置上。由此,不需比较便可直接取得所查记录。称这个对应关系f为散列函数,按这个思想建立的表为散列表。
此题的终极boss版~位运算(方法二)
方法一:
class Solution:
def singleNumber(self, nums: List[int]) -> int:
for i in nums:
if nums.count(i)==1:
return i
方法二:
class Solution:
def singleNumber(self, nums: List[int]) -> int:
res=0
for num in nums:
res^=num
return res