摘要:給定一個大小為的數組,找到其中的眾數。第五題合并兩個有序數組難度簡單給定兩個有序整數數組和,將合并到中,使得成為一個有序數組。說明初始化和的元素數量分別為和。第六題二叉樹的最大深度難度簡單給定一個二叉樹,找出其最大深度。
寫在前面的話
做做做題,慢慢上手了就覺得刷題速度變快了,果然還是有點笨~
希望最后一竅快點通吧~
169. 求眾數
難度:簡單
給定一個大小為 n 的數組,找到其中的眾數。眾數是指在數組中出現次數大于? n/2 ?的元素。
你可以假設數組是非空的,并且給定的數組總是存在眾數。給定一個大小為 n 的數組,找到其中的眾數。眾數是指在數組中出現次數大于? n/2 ?的元素。
你可以假設數組是非空的,并且給定的數組總是存在眾數。
我的題解:
class Solution(object): def majorityElement(self, nums): """ :type nums: List[int] :rtype: int """ value = nums[0] count = 0 for i in nums: if value == i: count = count + 1 else: if count == 0: value = i count = 1 continue count =count - 1 return value
我的思路:
這題參考了評論的題解,做了兩次,明白了來龍去脈。
中心思想就是:按順序遍歷數字,存在不同的數字就抵消相應的count,存在相同數字則增加,最后總能獲取到唯一一個不會被抵消全部的數字,就是眾數了。
136. 只出現一次的數字
難度:簡單
給定一個非空整數數組,除了某個元素只出現一次以外,其余每個元素均出現兩次。找出那個只出現了一次的元素。
說明:
你的算法應該具有線性時間復雜度。 你可以不使用額外空間來實現嗎?
我的題解:
class Solution(object): def singleNumber(self, nums): """ :type nums: List[int] :rtype: int """ a = 0 for num in nums: a = a ^ num return a
我的思路:
異或,兩個相同的數字的計算結果為0,最后剩余的則為唯一值
83. 刪除排序鏈表中的重復元素
難度:簡單
給定一個排序鏈表,刪除所有重復的元素,使得每個元素只出現一次。
我的題解:
# Definition for singly-linked list. # class ListNode(object): # def __init__(self, x): # self.val = x # self.next = None class Solution(object): def deleteDuplicates(self, head): """ :type head: ListNode :rtype: ListNode """ a = head if not a: return a while head.next: if head.next.val == head.val and head.next.next == None: head.next = None elif head.next.val == head.val and head.next.next: head.next = head.next.next else: head = head.next return a
我的思路:
當存在前后節點一致的時候,則前一個節點的next指向后一個節點的next,跳過即可。
其他:
因為鏈表的結構指向的是內存,遍歷完之后指向最后的節點,所以需要一個a指向頭結點。
100. 相同的樹
難度:簡單
給定兩個二叉樹,編寫一個函數來檢驗它們是否相同。
如果兩個樹在結構上相同,并且節點具有相同的值,則認為它們是相同的。
我的題解:
# Definition for a binary tree node. # class TreeNode(object): # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution(object): def isSameTree(self, p, q): """ :type p: TreeNode :type q: TreeNode :rtype: bool """ if not p and not q: return True if p and q: if p.val == q.val: return self.isSameTree(p.left,q.left) and self.isSameTree(p.right,q.right) else: return False else: return False
我的思路:
遞歸,主要是判斷兩個節點的值是否一致,一致的前提下,判斷向下的左右節點及更向下是否一致。
88. 合并兩個有序數組
難度:簡單
給定兩個有序整數數組 nums1 和 nums2,將 nums2 合并到 nums1 中,使得 num1 成為一個有序數組。
說明:
初始化 nums1 和 nums2 的元素數量分別為 m 和 n。
你可以假設 nums1 有足夠的空間(空間大小大于或等于 m + n)來保存 nums2 中的元素。
我的題解:
class Solution(object): def merge(self, nums1, m, nums2, n): """ :type nums1: List[int] :type m: int :type nums2: List[int] :type n: int :rtype: None Do not return anything, modify nums1 in-place instead. """ while m>0 and n>0: if nums1[m-1] >=nums2[n-1]: nums1[m+n-1] = nums1[m-1] m -= 1 else: nums1[m+n-1] = nums2[n-1] n -= 1 if n >0 : nums1[:n] = nums2[:n]class Solution(object): def merge(self, nums1, m, nums2, n): """ :type nums1: List[int] :type m: int :type nums2: List[int] :type n: int :rtype: None Do not return anything, modify nums1 in-place instead. """ while m>0 and n>0: if nums1[m-1] >=nums2[n-1]: nums1[m+n-1] = nums1[m-1] m -= 1 else: nums1[m+n-1] = nums2[n-1] n -= 1 if n >0 : nums1[:n] = nums2[:n]
我的思路:
因為nums1[m+n]為空的部分,所以我們可以從后向前寫,判斷兩個數組的值,更大的數字不斷向后挪,挪到一定程度的時候,剩余部分則為更長的數組的剩余未判斷部分。
104. 二叉樹的最大深度
難度:簡單
給定一個二叉樹,找出其最大深度。
二叉樹的深度為根節點到最遠葉子節點的最長路徑上的節點數。
說明: 葉子節點是指沒有子節點的節點。
我的題解:
# Definition for a binary tree node. # class TreeNode(object): # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution(object): def maxDepth(self, root): """ :type root: TreeNode :rtype: int """ if not root: return 0 if root.right is None and root.left is None: return 1 return max(self.maxDepth(root.right),self.maxDepth(root.left))+1
我的思路:
遞歸圖上為調用棧的情況,不斷向下尋找更遠的根節點。
基線判斷為:節點是否為空
遞歸判斷為:節點不為空且左節點或右節點還有值
總結最近在看《算法圖解》,感覺對遞歸理解更深一點,但學習之后重要的是實踐,還是要多做題。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/43353.html
摘要:寫在前面今天沒有叨逼叨但是又一次錯過了競賽愛睡覺的小李下周要上班,下下周一定要參加了握拳認真做題的分割線第一題兩地調度公司計劃面試人。第人飛往市的費用為,飛往市的費用為。示例輸入輸出解釋第一個人去市,費用為。 寫在前面 今天沒有叨逼叨...但是又一次錯過了競賽...愛睡覺的小李...下周要上班,下下周一定要參加了(握拳 認真做題的分割線 第一題 1029. 兩地調度公司計劃面試2N人。...
摘要:給定的字符串只含有小寫英文字母,并且長度不超過。其他這題了,要重做看了其他的人的題解,使用的是無限逼近中位值的辦法,理論基礎應該是泰勒公式。萬萬沒想到居然用到了泰勒公式手工執行了下算法,反而理解的更快,但是泰勒公式還得再復習下。 寫在前面的話 今天持續做題ing,python有意思~今天的題有點虐心...興許是我太笨了...會努力學習的!動態規劃我來啦~ 開始做題 第一題 459. 重...
摘要:第二題漢明距離難度簡單兩個整數之間的漢明距離指的是這兩個數字對應二進制位不同的位置的數目。給出兩個整數和,計算它們之間的漢明距離。第三題買賣股票的最佳時機難度簡單給定一個數組,它的第個元素是一支給定股票第天的價格。 寫在前面 這幾天斷斷續續做了題目,也在慢慢體會一些數據思維。終于不用邊做視頻邊寫題目啦~開心~把這幾天的題解發一下~ 認真做題的分割線 第一題 977. 有序數組的平方難度...
摘要:認真做題的分割線第一題乘積最大子序列難度中等給定一個整數數組,找出一個序列中乘積最大的連續子序列該序列至少包含一個數。 寫在前面的話 慢慢轉變思路,不再死磕不會做的題,思路可以先借鑒,但是一定要吃透透。上周末看完看完了《算法圖解》,感覺對一些題目的思路有比較大的幫助,但是還是要在實踐中理解。 認真做題的分割線 第一題 152. 乘積最大子序列難度:中等給定一個整數數組nums,找出一個...
摘要:不過可能還沒有抓到動態規劃的真諦,總覺得哪里需要再校正下思路。這題也是動態規劃的題目,目標總是要分解為子問題??偨Y看算法圖解的時候,涉及動態規劃的小結中有這樣的每種動態規劃解決方案都涉及網格。 寫在前面的話 感覺做題越多遇到的寫法越多,有種躍躍欲試的感覺~ 認真做題 第一題 70. 爬樓梯難度:簡單假設你正在爬樓梯。需要 n 階你才能到達樓頂。每次你可以爬 1 或 2 個臺階。你有多少...
閱讀 2426·2021-11-16 11:44
閱讀 1896·2021-10-12 10:12
閱讀 2190·2021-09-22 15:22
閱讀 3024·2021-08-11 11:17
閱讀 1519·2019-08-29 16:53
閱讀 2666·2019-08-29 14:09
閱讀 3485·2019-08-29 14:03
閱讀 3317·2019-08-29 11:09