leetcode刷題:
1.?334. 遞增的三元子序列 - 力扣(LeetCode)
方法一:使用貪心算法求解
class Solution(object):def increasingTriplet(self, nums):first = nums[0]second = float('inf')for i in nums:if i>second:return Trueelif i>first:second=ielif i<first:first=ireturn False
這種方法通過不斷地貪心來解決問題。首先解決的是最大值,如果達到a<b<c那么就直接true,其次是次大,如果比最大值小比最小值大,那么就是次大,最后如果比最小值還小,說明成就遞增三元子序列的可能更大一點。
#方法二:用數組來維護
class Solution(object):def increasingTriplet(self, nums):n=len(nums)left,right=[float("inf")]*n,[float("-inf")]*n# 維護兩個數組,left表示不包括此時左側的最小值,right表示不包括此時的右側的最大值for i in range(1,n):left[i]=min(left[i-1],nums[i-1])for i in range(n-2,0,-1):right[i]=max(right[i+1],nums[i+1])for i in range(1, n - 1):if left[i] < nums[i] < right[i]:return Truereturn False
這種方法維護了兩個數組,分別是left和right,其中left表示當前數字左邊的比當前數字小的,right表示當前數字右邊的比當前數字大的,然后再比較left<nums<right,如果滿足這個條件,說明存在遞增子序列,如果不滿足,則證明不存在,返回False
2.1657. 確定兩個字符串是否接近 - 力扣(LeetCode)
class Solution:def closeStrings(self, word1: str, word2: str) -> bool:dict1=Counter(word1)dict2=Counter(word2)return dict1.keys()==dict2.keys() and sorted(dict1.values())==sorted(dict2.values())
首先比較字符出現是否一樣,然后比較字符出現的次數是否一樣。
plus:當不能替換的時候,就直接
class Solution:def closeStrings(self, word1: str, word2: str) -> bool:dict1=Counter(word1)dict2=Counter(word2)return dict1==dict2
3.437. 路徑總和 III - 力扣(LeetCode)
class Solution:def pathSum(self, root: Optional[TreeNode], targetSum: int) -> int:if root is None:return 0def dfs(root,target):count=0if root.val==target:count+=1if root.left:count+=dfs(root.left,target-root.val)if root.right:count+=dfs(root.right,target-root.val)return countreturn dfs(root,targetSum)+self.pathSum(root.left,targetSum)+self.pathSum(root.right,targetSum)
這道題難點在于是否考慮本節點被選擇,以及dfs的運用。