1. 程式人生 > >python學習(二十二)

python學習(二十二)

注意,答案只是代表是他人寫的程式碼,正確,但不一定能通過測試(比如超時),列舉出來只是它們擁有著獨到之處,雖然大部分確實比我的好

101. Symmetric Tree

題目

Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).

For example, this binary tree [1,2,2,3,4,4,3] is symmetric:

    1
   / \
  2   2
 / \ / \
3  4 4  3

But the following [1,2,2,null,3,null,3] is not:

    1
   / \
  2   2
   \   \
   3    3

Note:
Bonus points if you could solve it both recursively and iteratively.

思路與解答

感覺上確實也很簡單嘛
空的居然也算映象的

        def dfs(r1,r2):
            if r1 == r2:return True
            if r1 and r2:
                if r1.val == r2.val:
                    return
dfs(r1.left,r2.right) and dfs(r1.right,r2.left) return False return False return dfs(root.left,root.right) if root else True

搞定

答案

差不多

        def isSym(L,R):
            if not L and not R: return True
            if L and R and L.val == R.val: 
                return
isSym(L.left, R.right) and isSym(L.right, R.left) return False return isSym(root, root)

414. Third Maximum Number

題目

Given a non-empty array of integers, return the third maximum number in this array. If it does not exist, return the maximum number. The time complexity must be in O(n).

Example 1:
Input: [3, 2, 1]

Output: 1

Explanation: The third maximum is 1.
Example 2:
Input: [1, 2]

Output: 2

Explanation: The third maximum does not exist, so the maximum (2) is returned instead.
Example 3:
Input: [2, 2, 3, 1]

Output: 1

Explanation: Note that the third maximum here means the third maximum distinct number.
Both numbers with value 2 are both considered as second maximum.

思路與解答

最大數,第二最大數,第三最大數。。。

        n = sorted(set(nums))
        return n[-3] if len(n) >= 3 else n[-1]

我覺得肯定有一行的,我這個也能改一行,但是太醜了
呃,好像有時間複雜度的要求?

        fmax = smax = tmax = float('-inf')
        for n in nums :
            if n == fmax or n == smax or n <= tmax:
                continue
            if n > fmax: fmax, smax, tmax = n, fmax, smax
            elif n > smax: smax, tmax = n, smax
            elif n > tmax: tmax = n
        return tmax if tmax != float('-inf') else fmax

差不多快嘛

答案

669. Trim a Binary Search Tree

題目

Given a binary search tree and the lowest and highest boundaries as L and R, trim the tree so that all its elements lies in [L, R] (R >= L). You might need to change the root of the tree, so the result should return the new root of the trimmed binary search tree.

Example 1:
Input: 

    1
   / \
  0   2

  L = 1
  R = 2

Output: 
    1
      \
       2

Example 2:
Input: 

    3
   / \
  0   4
   \
    2
   /
  1

  L = 1
  R = 3

Output: 

      3
     / 
   2   
  /
 1

思路與解答

感覺和上面的題不是一個難度的
肯定是dfs,關鍵要怎麼做啊
我記得好像是當前節點刪除後,提拔左葉節點上來,沒有就右葉
不對這是個二叉搜尋樹,不能單純的提拔左節點,當前值小於,所有的左邊都不符合了,當前值大於同理
寫者寫著就失去連線了

        def dfs(r):
            if r:
                if r.val > R:
                    return dfs(r.left)
                elif r.val < L:
                    return dfs(r.right)
                else:
                    r.left = dfs(r.left)
                    r.right = dfs(r.right)
                    return r   
        return dfs(root)

很久之後才能重新連上leetcode。。。

答案

自身遞迴。。。一直沒試過這麼寫
這個和我的好像啊,好像就是我的dfs函式。。。。

class Solution(object):
    def trimBST(self, root, L, R):
        """
        :type root: TreeNode
        :type L: int
        :type R: int
        :rtype: TreeNode
        """
        if not root:
            return None
        if L > root.val:
            return self.trimBST(root.right, L, R)
        elif R < root.val:
            return self.trimBST(root.left, L, R)
        root.left = self.trimBST(root.left, L, R)
        root.right = self.trimBST(root.right, L, R)
        return root

167. Two Sum II - Input array is sorted

題目

Given an array of integers that is already sorted in ascending order, find two numbers such that they add up to a specific target number.

The function twoSum should return indices of the two numbers such that they add up to the target, where index1 must be less than index2. Please note that your returned answers (both index1 and index2) are not zero-based.

You may assume that each input would have exactly one solution and you may not use the same element twice.

Input: numbers={2, 7, 11, 15}, target=9
Output: index1=1, index2=2

思路與解答

很簡單
用字典吧
查一下就好
不讓用相同的元素啊
是index還不是那個序號啊
居然還有重複的啊,臥槽我的設想直接崩了
這可怎麼用字典啊

        d={}
        for i,j in enumerate(numbers):
            if target - j in d and d[target - j] != i:
                return [d[target - j]+1,i+1]
            d[j] = i

巧妙的避開了這個問題

答案

我有考慮過類似的方案,不過感覺不如用字典的簡便

    def twoSum(self, numbers, target):
        left = 0
        right = len(numbers) - 1
        while left < right:
            sum = numbers[left] + numbers[right]
            if sum < target:
                left += 1
            elif sum > target:
                right -= 1
            else:
                return left + 1, right + 1
        return -1, -1

優秀的演算法

def twoSum(self, numbers, target):
    investigatedSoFar = []
    for i in range(len(numbers)):
        if not numbers[i] in investigatedSoFar:
            investigatedSoFar.append(numbers[i])
            l, r = i + 1, len(numbers) - 1
            tmp = target - numbers[i]
            while l <= r:
                mid = l + (r-l) // 2
                if numbers[mid] == tmp:
                    return([i + 1, mid + 1])
                elif numbers[mid] < tmp:
                    l = mid + 1
                else:
                    r = mid - 1

但是大部分還是喜歡用dict的

653. Two Sum IV - Input is a BST

題目

Given a Binary Search Tree and a target number, return true if there exist two elements in the BST such that their sum is equal to the given target.

Example 1:
Input: 
    5
   / \
  3   6
 / \   \
2   4   7

Target = 9

Output: True
Example 2:
Input: 
    5
   / \
  3   6
 / \   \
2   4   7

Target = 28

Output: False

思路與解答

和上面的題差不多嘛

    def findTarget(self, root, k):
        """
        :type root: TreeNode
        :type k: int
        :rtype: bool
        """
        self.d={}
        def dfs(r):
            if r:
                if k-r.val in self.d:
                    return True
                self.d[r.val] = 1
                return dfs(r.left) or dfs(r.right)
        return bool(dfs(root))

直接return dfs(root)的話在未找到的情況先為Null而不是False,所以需要在外面增加一個bool()

答案

嗯,感覺這道題用堆疊或者佇列來做是要好些,我寫的時候就覺得dfs不能及時退出了

if not root:
            return False
        queue = collections.deque()
        queue.append(root)
        memo = set()
        while queue:
            node = queue.popleft()
            if k - node.val in memo:
                return True
            memo.add(node.val)
            if node.left:
                queue.append(node.left)
            if node.right:
                queue.append(node.right)
        return False

    def findTarget(self, root, k):
        if not root: return False
        bfs, s = [root], set()
        for i in bfs:
            if k - i.val in s: return True
            s.add(i.val)
            if i.left: bfs.append(i.left)
            if i.right: bfs.append(i.right)
        return False

相關推薦

Python學習—— Django之Form組件

tran important edi 日期 style p s ext 一個 這樣的 一、構建一個表單 假設你想在你的網站上創建一個簡單的表單,以獲得用戶的名字。你需要類似這樣的模板: <form action="/your-name/" method="post"

Python學習---- ctypes庫的使用整理

Python中ctypes的使用整理 ctypes是Python的一個外部庫,提供和C語言相容的資料型別,可以很方便地呼叫C DLL中的函式。ctypes的官方文件在這裡。 1. ctypes基本資料型別對映表 引數型別預先設定好,或者在呼叫函式時再把引數轉成相應的c_**

salesforce零基礎學習項目中的零碎知識點小總結

gin 不同 grant dmi ima -m ron 角色 com 項目終於告一段落,雖然比較苦逼,不過也學到了好多知識,總結一下,以後當作參考。 一.visualforce標簽中使用html相關的屬性使用 曾經看文檔沒有看得仔細,導致開發的時候走了一些彎路。還好得到

Linux學習screen

oot mst tail pre linux article col install vmstat screen概述 我們可以將screen看成一個子窗口,我們可以通過命令將這個子窗口放入後臺運行而不關閉它。當我們有需要時,我們還可以將它調出來。 screen使用 安裝

機器學習——t-SNE, Adaboost

t-SNE(續) SNE 在介紹t-SNE之前,我們首先介紹一下SNE(Stochastic Neighbor Embedding)的原理。 假設我們有資料集X,它共有N個數據點。每一個數據點xixi的維度為D,我們希望降低為d維。在一般用於視覺化的條

Java架構學習Zookeeper基礎&ZK概述&ZK資料結構&windows搭建ZK&Java操作ZK&ZK建立臨時節點&ZK的Watcher事件通知&架構面試

一、Zookeeper概述 1、什麼是Zookeeper? 答:Zookeeper是分散式開源框架,是分散式協調工具。 2、應用場景: 答:dubbo 是rpc遠端呼叫框架+Zookeeper作為註冊中心,(命名服務) 釋出訂閱 --- wathcher 對z

Linux學習

第十二週學習內容:防火牆、日誌、時鐘和sudo許可權管理 第十二週作業: 1、詳述iptables五鏈。       每臺主機可能同時要開啟多個埠供其他主機的程序或者服務訪問,但在現今的網路環境中隨意開放埠是非常危險的行為,可能會被另有企圖

前端學習 DOM-資料儲存Dom

瀏覽器端的資料儲存,也就是Web Storage的用法 Storage例項物件一共有兩個(全域性物件):localStorage,sessionStorage,因為是全域性物件,所以可以通過winow.localStorage和window.sessionStorage來訪問 lo

JMeter學習屬性和變數

一、Jmeter中的屬性: 1、JMeter屬性統一定義在jmeter.properties檔案中,我們可以在該檔案中新增自定義的屬性 2、JMeter屬性在測試指令碼的任何地方都是可見的(全域性),通常被用來定義一些JMeter使用的預設值,可以用於線上程間傳遞資訊。 3

salesforce零基礎學習使用Ant Migration Tool 實現Metadata遷移

none ask 文件中 atlas lis mem The 官方 密碼 我們在做項目時經常會使用changeset作為部署工具,但是某些場景使用changeset會比較難操作,比如當我們在sandbox將apex class更改名字想要部署到生產的org或者其他環境的or

Appium+python自動化- 程式碼寫死一時爽,框架重構火葬場 - PageObject+unittest超詳解

簡介 江湖有言:”程式碼寫死一時爽,框架重構火葬場“,更有人戲言:”程式碼動態一時爽,一直動態一直爽

Appium+python自動化- 壽終正寢完結篇 - 結尾有驚喜,過時不候超詳解

1.簡介  按照上一篇的計劃,今天給小夥伴們分享執行測試用例,生成測試報告,以及自動化平臺。今天這篇分享講解完。Appium自動化測試框架就要告一段落了。 2.執行測試用例&報告生成  測試報告,巨集哥已經講解了testng、HTMLTestRunner、allure等等,今天就在

python學習筆記第

random 對象 學習 alt 重命名 浮點 內容 目錄 模塊 模塊:模塊本質上就是一個py文件。分為三部分:內置模塊、第三方模塊(模塊調用以及包的概念)先找解釋器裏的Py文件 再找安裝路徑lib下的文件,再找自定義的模塊。時間戳:1970年設置的一個時間為0,時間每增加

python學習第五天logging模塊的使用

logging模塊 this 需求 gin info 等於 net 正常的 可能 很多程序都有記錄日誌的需求,並且日誌包含的信息即有正常的程序訪問日誌,還可能有錯誤,警告等信息輸出,python的 logging模塊提供了標準的日誌接口,你可以通過它存儲各種格式的日誌

python學習第五天logging模組的使用

   很多程式都有記錄日誌的需求,並且日誌包含的資訊即有正常的程式訪問日誌,還可能有錯誤,警告等資訊輸出,python的 logging模組提供了標準的日誌介面,你可以通過它儲存各種格式的日誌,logging的日誌可以分debug(),info() warning() error()

Python3學習python從mongo中取資料,使用pandas.DataFrame進行列操作並轉字典

使用該操作的具體場景(一般與mongo相結合): 比如mongo中存了幾萬條資料,需要將mongo中的資料取出來,並對其中的一列進行相關操作,最後轉化為字典格式。 具體程式碼實現如下: import pandas as pd import pymongo import

Python3學習python遍歷操作目錄下的檔案

在實際場景中,我們往往會希望可以遍歷某個目錄下的所有檔案,執行一些操作,比如對這些檔案的轉化,比如提取這些檔案的資料,比如將這些檔案經過某些操作後再儲存至另外的目錄下。 今天講一下如何遍歷操作目錄下的檔案。 假設我們需要對$Home/log目錄下的檔案進行操作後,寫入$H

Python3學習python中的click模組詳解

Click模組 click模組是Flask的作者開發的一個第三方模組,用於快速建立命令列。它的作用與Python標準庫的argparse相同,但是,使用起來更簡單。 基本使用 Click對argparse的主要改在在於易用性,使用click模組主要分為兩個步驟: 使用

python學習作業筆記

#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2018/8/20 17:32 # @Author : # 多執行緒

salesforce零基礎學習apex:actionRegion以及apex:actionSupport淺談

xxx turn 組件 聯動 異步 action cti 相關 bottom 我們在開發中,很難會遇見不提交表單的情況。常用的apex:commandButton,apex:commandLink,apex:actionFunction,apex:actionSupport