国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

小李飛刀:做題第七彈!

AlphaWatch / 2222人閱讀

摘要:給定一個(gè)大小為的數(shù)組,找到其中的眾數(shù)。第五題合并兩個(gè)有序數(shù)組難度簡單給定兩個(gè)有序整數(shù)數(shù)組和,將合并到中,使得成為一個(gè)有序數(shù)組。說明初始化和的元素?cái)?shù)量分別為和。第六題二叉樹的最大深度難度簡單給定一個(gè)二叉樹,找出其最大深度。

寫在前面的話

做做做題,慢慢上手了就覺得刷題速度變快了,果然還是有點(diǎn)笨~
希望最后一竅快點(diǎn)通吧~

開始做題
第一題

169. 求眾數(shù)
難度:簡單
給定一個(gè)大小為 n 的數(shù)組,找到其中的眾數(shù)。眾數(shù)是指在數(shù)組中出現(xiàn)次數(shù)大于? n/2 ?的元素。
你可以假設(shè)數(shù)組是非空的,并且給定的數(shù)組總是存在眾數(shù)。給定一個(gè)大小為 n 的數(shù)組,找到其中的眾數(shù)。眾數(shù)是指在數(shù)組中出現(xiàn)次數(shù)大于? n/2 ?的元素。
你可以假設(shè)數(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ù)字就抵消相應(yīng)的count,存在相同數(shù)字則增加,最后總能獲取到唯一一個(gè)不會被抵消全部的數(shù)字,就是眾數(shù)了。

第二題

136. 只出現(xiàn)一次的數(shù)字
難度:簡單
給定一個(gè)非空整數(shù)數(shù)組,除了某個(gè)元素只出現(xiàn)一次以外,其余每個(gè)元素均出現(xiàn)兩次。找出那個(gè)只出現(xiàn)了一次的元素。

說明
你的算法應(yīng)該具有線性時(shí)間復(fù)雜度。 你可以不使用額外空間來實(shí)現(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

我的思路:
異或,兩個(gè)相同的數(shù)字的計(jì)算結(jié)果為0,最后剩余的則為唯一值

第三題

83. 刪除排序鏈表中的重復(fù)元素
難度:簡單
給定一個(gè)排序鏈表,刪除所有重復(fù)的元素,使得每個(gè)元素只出現(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

我的思路:
當(dāng)存在前后節(jié)點(diǎn)一致的時(shí)候,則前一個(gè)節(jié)點(diǎn)的next指向后一個(gè)節(jié)點(diǎn)的next,跳過即可。
其他:
因?yàn)殒湵淼慕Y(jié)構(gòu)指向的是內(nèi)存,遍歷完之后指向最后的節(jié)點(diǎn),所以需要一個(gè)a指向頭結(jié)點(diǎn)。

第四題

100. 相同的樹
難度:簡單
給定兩個(gè)二叉樹,編寫一個(gè)函數(shù)來檢驗(yàn)它們是否相同。
如果兩個(gè)樹在結(jié)構(gòu)上相同,并且節(jié)點(diǎn)具有相同的值,則認(rèn)為它們是相同的。
我的題解:

# 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

我的思路:
遞歸,主要是判斷兩個(gè)節(jié)點(diǎn)的值是否一致,一致的前提下,判斷向下的左右節(jié)點(diǎn)及更向下是否一致。

第五題

88. 合并兩個(gè)有序數(shù)組
難度:簡單
給定兩個(gè)有序整數(shù)數(shù)組 nums1 和 nums2,將 nums2 合并到 nums1 中,使得 num1 成為一個(gè)有序數(shù)組。

說明:

初始化 nums1 和 nums2 的元素?cái)?shù)量分別為 m 和 n。

你可以假設(shè) 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]

我的思路:
因?yàn)閚ums1[m+n]為空的部分,所以我們可以從后向前寫,判斷兩個(gè)數(shù)組的值,更大的數(shù)字不斷向后挪,挪到一定程度的時(shí)候,剩余部分則為更長的數(shù)組的剩余未判斷部分。

第六題

104. 二叉樹的最大深度
難度:簡單
給定一個(gè)二叉樹,找出其最大深度。
二叉樹的深度為根節(jié)點(diǎn)到最遠(yuǎn)葉子節(jié)點(diǎn)的最長路徑上的節(jié)點(diǎn)數(shù)。

說明: 葉子節(jié)點(diǎn)是指沒有子節(jié)點(diǎn)的節(jié)點(diǎn)。

我的題解:

# 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)用棧的情況,不斷向下尋找更遠(yuǎn)的根節(jié)點(diǎn)。

基線判斷為:節(jié)點(diǎn)是否為空

遞歸判斷為:節(jié)點(diǎn)不為空且左節(jié)點(diǎn)或右節(jié)點(diǎn)還有值

總結(jié)

最近在看《算法圖解》,感覺對遞歸理解更深一點(diǎn),但學(xué)習(xí)之后重要的是實(shí)踐,還是要多做題。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/43353.html

相關(guān)文章

  • 小李飛刀題第十二彈!

    摘要:寫在前面今天沒有叨逼叨但是又一次錯(cuò)過了競賽愛睡覺的小李下周要上班,下下周一定要參加了握拳認(rèn)真做題的分割線第一題兩地調(diào)度公司計(jì)劃面試人。第人飛往市的費(fèi)用為,飛往市的費(fèi)用為。示例輸入輸出解釋第一個(gè)人去市,費(fèi)用為。 寫在前面 今天沒有叨逼叨...但是又一次錯(cuò)過了競賽...愛睡覺的小李...下周要上班,下下周一定要參加了(握拳 認(rèn)真做題的分割線 第一題 1029. 兩地調(diào)度公司計(jì)劃面試2N人。...

    yagami 評論0 收藏0
  • 小李飛刀題第六彈!

    摘要:給定的字符串只含有小寫英文字母,并且長度不超過。其他這題了,要重做看了其他的人的題解,使用的是無限逼近中位值的辦法,理論基礎(chǔ)應(yīng)該是泰勒公式。萬萬沒想到居然用到了泰勒公式手工執(zhí)行了下算法,反而理解的更快,但是泰勒公式還得再復(fù)習(xí)下。 寫在前面的話 今天持續(xù)做題ing,python有意思~今天的題有點(diǎn)虐心...興許是我太笨了...會努力學(xué)習(xí)的!動態(tài)規(guī)劃我來啦~ 開始做題 第一題 459. 重...

    BigNerdCoding 評論0 收藏0
  • 小李飛刀題第十彈!

    摘要:第二題漢明距離難度簡單兩個(gè)整數(shù)之間的漢明距離指的是這兩個(gè)數(shù)字對應(yīng)二進(jìn)制位不同的位置的數(shù)目。給出兩個(gè)整數(shù)和,計(jì)算它們之間的漢明距離。第三題買賣股票的最佳時(shí)機(jī)難度簡單給定一個(gè)數(shù)組,它的第個(gè)元素是一支給定股票第天的價(jià)格。 寫在前面 這幾天斷斷續(xù)續(xù)做了題目,也在慢慢體會一些數(shù)據(jù)思維。終于不用邊做視頻邊寫題目啦~開心~把這幾天的題解發(fā)一下~ 認(rèn)真做題的分割線 第一題 977. 有序數(shù)組的平方難度...

    bingo 評論0 收藏0
  • 小李飛刀題第八彈!

    摘要:認(rèn)真做題的分割線第一題乘積最大子序列難度中等給定一個(gè)整數(shù)數(shù)組,找出一個(gè)序列中乘積最大的連續(xù)子序列該序列至少包含一個(gè)數(shù)。 寫在前面的話 慢慢轉(zhuǎn)變思路,不再死磕不會做的題,思路可以先借鑒,但是一定要吃透透。上周末看完看完了《算法圖解》,感覺對一些題目的思路有比較大的幫助,但是還是要在實(shí)踐中理解。 認(rèn)真做題的分割線 第一題 152. 乘積最大子序列難度:中等給定一個(gè)整數(shù)數(shù)組nums,找出一個(gè)...

    ztyzz 評論0 收藏0
  • 小李飛刀題第九彈!

    摘要:不過可能還沒有抓到動態(tài)規(guī)劃的真諦,總覺得哪里需要再校正下思路。這題也是動態(tài)規(guī)劃的題目,目標(biāo)總是要分解為子問題。總結(jié)看算法圖解的時(shí)候,涉及動態(tài)規(guī)劃的小結(jié)中有這樣的每種動態(tài)規(guī)劃解決方案都涉及網(wǎng)格。 寫在前面的話 感覺做題越多遇到的寫法越多,有種躍躍欲試的感覺~ 認(rèn)真做題 第一題 70. 爬樓梯難度:簡單假設(shè)你正在爬樓梯。需要 n 階你才能到達(dá)樓頂。每次你可以爬 1 或 2 個(gè)臺階。你有多少...

    Bamboy 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<