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