自我监督刷题记录处3
第3天。。决定先从基础算法分类做起,可能更有逻辑性?
Leetcode 28 strStr()
(Easy Level)
class Solution:
def strStr(self, haystack: str, needle: str) -> int:
len_h = len(haystack)
len_n = len(needle)
pointer = 0
#特殊情况,所查看的被包含对象为空,或包含对象小于被包含对象
if len_n == 0:
return 0
if len_h == o or len_h < len_n:
return -1
#循环needle的长度次就可以判断
while pointer <= len_h - len_n:
#分别对比被包含对象数位直到剩下其长度位置
if len_h[pointer] == len_n[0]:
#如果首位一致,判断后面的needle长中str是否一样
if len[pointer:pointer + len_n) == needle:
return pointer
else:
#后面str不一样,指针右移
pointer +=1
else:
#首位不一样,指针右移
pointer +=1
return -1
评论里说这是道KMP算法题,但我two pointer更容易想一些。
Leetcode 112 Max Profit
(Easy Level)
class Solution:
def maxProfit(self, prices: List[int]) -> int:
profit = 0
for i in range (1,len(prices)):
#直接对比两日价格
if prices[i] > prices[i-1]:
return profit += prices[i] - prices[i-1]
return profit
贪心算法很经典的一道题,稍微整理一下就可以变得很短
~(❤ ω ❤),今天真的偷懒了
Leetcode 189 Rotate Array
(Easy Level)
#1.拼接
class Solution:
def rotate(self, nums: List[int], k: int) -> None:
n = len(nums)
k = k % n
nums[:] = nums[-k:] + nums[:-k]
#2.插入
class Solution:
def rotate(self, nums: List[int], k: int) -> None:
n = len(nums)
k = k % n
for _ in range(k):
nums.insert(0,nums.pop())
#3 切片
class Solution:
def rotate(self, nums: List[int], k: int) -> None:
n = len(nums)
k = k % n
nums[:] = nums[::-1]
nums[:k] = nums[:k][::-1]
nums[k:] = nums[k:][::-1]
三种方法差不多就够了,曾经在面试的时候碰到过,虽然代码很简单,但题目是很经典的。属于高频题目