1.删除排序数组中的重复项
class Solution:
def removeDuplicates(self, nums: List[int]) -> int:
i = 1
while i < len(nums):#len()数组长度
if nums[i-1] == nums[i]:
del nums[i]#del删除数组元素
else:
i += 1
print(i)
2.买卖股票的最佳时机
这道题是看了题解之后才做出来的,感觉这个解法还挺智慧的。将数组通过折线图的方式画出来,会很容易观察到,上升的线就是盈利的地方 ,如果有连续上升的线也可以拆分成两段或几段各自上升的线。
class Solution:
def maxProfit(self, prices: List[int]) -> int:
if len(prices) < 2:
return 0#考虑了长度为一的数组
res = 0
for i in range(1,len(prices)):
if prices[i] > prices[i-1]:
res += prices[i] - prices[i-1]#计算每一次盈利并相加
return res
3.旋转数组
思路:右移k位,就是讲数组后k位依次移到数组第一位。
class Solution:
def rotate(self, nums: List[int], k: int) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
i = 0
j = len(nums)
while i < k:
nums.insert(0,nums[j-1])#insert()插入值nums[j-1]到数组nums[0]中
nums.pop(j)#pop()删除数组元素nums[j]
i += 1
4.存在重复元素
先排序,在循环比较。
class Solution:
def containsDuplicate(self, nums: List[int]) -> bool:
nums.sort()
for i in range(1,len(nums)):
if nums[i] == nums[i-1]:
return True
else:
return False
5.只出现一次的数字
思路:排序之后循环两两比较。
class Solution:
def singleNumber(self, nums: List[int]) -> int:
nums.sort()
i = 1
while i < len(nums):
if nums[i] == nums[i-1]:
i += 2
else:
return nums[i-1]
return nums[i-1]
这道题看了题解后,还有一个很好的方法:采用异或运算。
异或运算:两个相同的数异或为零,任何数异或零都为它本身。将数组所有元素做异或运算,最后的结果就是那个只出现了一次的元素。