20 有效括號
方法思路
要判斷一個僅由括號組成的字符串是否有效,可以使用棧這一數據結構。核心思路是遍歷字符串中的每個字符,遇到左括號時壓入棧中,遇到右括號時檢查棧頂的左括號是否匹配。若匹配則彈出棧頂元素,否則返回false。最終,若棧為空則說明所有括號正確閉合。
class Solution:def isValid(self,s):class Solution:def isValid(self,s):dic = {')':'(',']':'[','}':'{'}stack = []for i in s:if i in dic:if not stack or dic[i] != stack[-1]:return Falsestack.pop()else:stack.append(i)return not stack
?21. 合并兩個有序鏈表
方法思路
合并兩個有序鏈表可以通過逐個比較節點值并逐步構建新鏈表來實現。使用虛擬頭節點簡化初始條件處理,然后用指針依次連接較小值的節點,直到其中一個鏈表遍歷完畢,最后將剩余鏈表直接接上。
class ListNode:def __init__(self,val=0,next=None):self.val = valself.next = next
class Solution:def mergeTwoLists(self,list1,list2):LNode = ListNode()p = LNode #虛擬指針while list1 and list2:if list1.val <= list2.val:p.next = list1list1 = list1.nextelse:p.next = list2list2 = list2.nextp = p.nextp.next = list1 if list1 else list2return LNode.next
26. 刪除有序數組中的重復項
但實際上題目只要求前k個元素正確,后面的元素無關緊要。
方法思路
使用雙指針法,快指針遍歷數組,慢指針記錄當前有效位置。由于數組已排序,重復元素必然相鄰,遇到不同元素時將其移至慢指針位置,最后返回慢指針位置+1即為新數組長度。
#k是慢指針,用來記錄我們想要的數組真正的下標,i是快指針用來遍歷數組
class Solution:def removeDuplicates(self,nums):if not nums:return 0k = 0for i in range(1,len(nums)):if nums[i] != nums[k]:k += 1nums[k] = nums[i]return k+1
27.移除元素
但實際上題目只要求前k個元素正確,后面的元素無關緊要。
使用雙指針法,快指針遍歷數組,慢指針記錄有效位置。將非目標值的元素移至數組前部,最后返回有效長度。
class Solution:def removeElement(self,nums,val):if not nums:return 0k = 0for i in range(0,len(nums)):if nums[i] != val:nums[k] = nums[i]k += 1return k