leetcode上的python練習(5)

leetcode上的python練習(5)

來自專欄 python的學習

(217)給定一個整數數組,判斷是否存在重複元素。

如果任何值在數組中出現至少兩次,函數返回 true。如果數組中每個元素都不相同,則返回 false。

示例 1:

輸入: [1,2,3,1]輸出: true

示例 2:

輸入: [1,2,3,4]輸出: false

示例 3:

輸入: [1,1,1,3,3,4,3,2,4,2]輸出: true

答:(超時)

class Solution(object): def containsDuplicate(self, nums): """ :type nums: List[int] :rtype: bool """ for i in nums: if nums.count(i)>1: return True return False

答:

class Solution(object): def containsDuplicate(self, nums): """ :type nums: List[int] :rtype: bool """ return len(nums)!=len(set(nums))

(219)給定一個整數數組和一個整數 k,判斷數組中是否存在兩個不同的索引 i j,使得 nums [i] = nums [j],並且 ij 的差的絕對值最大為 k

示例 1:

輸入: nums = [1,2,3,1], k= 3輸出: true

示例 2:

輸入: nums = [1,0,1,1], k=1輸出: true

示例 3:

輸入: nums = [1,2,3,1,2,3], k=2輸出: false

答:

class Solution(object): def containsNearbyDuplicate(self, n, k): """ :type nums: List[int] :type k: int :rtype: bool """ record = {} for i, num in enumerate(n): if num in record and i - record[num] <= k: return True record[num] = i return False

(225)使用隊列實現棧的下列操作:

  • push(x) -- 元素 x 入棧
  • pop() -- 移除棧頂元素
  • top() -- 獲取棧頂元素
  • empty() -- 返回棧是否為空

答:

class MyStack(object): def __init__(self): """ Initialize your data structure here. """ self.a=[] def push(self, x): """ Push element x onto stack. :type x: int :rtype: void """ self.a.append(x) def pop(self): """ Removes the element on top of the stack and returns that element. :rtype: int """ b=self.a[-1] del self.a[-1] return b def top(self): """ Get the top element. :rtype: int """ return self.a[-1] def empty(self): """ Returns whether the stack is empty. :rtype: bool """ return self.a==[] # Your MyStack object will be instantiated and called as such:# obj = MyStack()# obj.push(x)# param_2 = obj.pop()# param_3 = obj.top()# param_4 = obj.empty()

(226)翻轉一棵二叉樹。

示例:

輸入:

4 / 2 7 / / 1 3 6 9

輸出:

4 / 7 2 / / 9 6 3 1

答:

# Definition for a binary tree node.# class TreeNode(object):# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution(object): def invertTree(self, root): """ :type root: TreeNode :rtype: TreeNode """ def ver(root): if root==None: return if root.left!=None or root.right!=None: root.left,root.right=root.right,root.left ver(root.left) ver(root.right) ver(root) return root

(231)給定一個整數,編寫一個函數來判斷它是否是 2 的冪次方。

示例 1:

輸入: 1輸出: true解釋: 20 = 1

示例 2:

輸入: 16輸出: true解釋: 24 = 16

示例 3:

輸入: 218輸出: false

答:

class Solution(object): def isPowerOfTwo(self, n): """ :type n: int :rtype: bool """ if n<1: return False return bin(n).count(1)==1

答:(看n的二進和n-1的二進&是否為0)

class Solution(object): def isPowerOfTwo(self, n): """ :type n: int :rtype: bool """ if n<1: return False return not(n & (n-1))

(232)使用棧實現隊列的下列操作:

  • push(x) -- 將一個元素放入隊列的尾部。
  • pop() -- 從隊列首部移除元素。
  • peek() -- 返回隊列首部的元素。
  • empty() -- 返回隊列是否為空。

示例:

MyQueue queue = new MyQueue();queue.push(1);queue.push(2); queue.peek(); // 返回 1queue.pop(); // 返回 1queue.empty(); // 返回 false

答:

class MyQueue(object): def __init__(self): """ Initialize your data structure here. """ self.a=[] def push(self, x): """ Push element x to the back of queue. :type x: int :rtype: void """ self.a.append(x) def pop(self): """ Removes the element from in front of queue and returns that element. :rtype: int """ b=self.a[0] del self.a[0] return b def peek(self): """ Get the front element. :rtype: int """ return self.a[0] def empty(self): """ Returns whether the queue is empty. :rtype: bool """ return self.a==[] # Your MyQueue object will be instantiated and called as such:# obj = MyQueue()# obj.push(x)# param_2 = obj.pop()# param_3 = obj.peek()# param_4 = obj.empty()

(234)請判斷一個鏈表是否為迴文鏈表。

示例 1:

輸入: 1->2輸出: false

示例 2:

輸入: 1->2->2->1輸出: true

答:

# Definition for singly-linked list.# class ListNode(object):# def __init__(self, x):# self.val = x# self.next = Noneclass Solution(object): def isPalindrome(self, head): """ :type head: ListNode :rtype: bool """ a=[] while head: a.append(head.val) head=head.next return a==a[::-1]

(242)給定兩個字元串 st ,編寫一個函數來判斷 t 是否是 s 的一個字母異位詞。

示例 1:

輸入: s = "anagram", t = "nagaram"輸出: true

示例 2:

輸入: s = "rat", t = "car"輸出: false

答:

class Solution(object): def isAnagram(self, s, t): """ :type s: str :type t: str :rtype: bool """ return sorted(s)==sorted(t)

(258)

給定一個非負整數 num,反覆將各個位上的數字相加,直到結果為一位數。示例:輸入: 38輸出: 2 解釋: 各位相加的過程為:3 + 8 = 11, 1 + 1 = 2。 由於 2 是一位數,所以返回 2。

答:

class Solution(object): def addDigits(self, s): """ :type num: int :rtype: int """ while s>9: s = sum(int(str(s)[i])for i in range(len(str(s)))) return s

(263)

編寫一個程序判斷給定的數是否為丑數。丑數就是只包含質因數 2, 3, 5 的正整數。示例 1:輸入: 6輸出: true解釋: 6 = 2 × 3示例 2:輸入: 8輸出: true解釋: 8 = 2 × 2 × 2示例 3:輸入: 14輸出: false 解釋: 14 不是丑數,因為它包含了另外一個質因數 7。

答:

class Solution(object): def isUgly(self, num): """ :type num: int :rtype: bool """ while num >0 and num%2==0: num /= 2 while num >0 and num%3==0: num /= 3 while num >0 and num%5==0: num /= 5 return True if num == 1.0 else False

(268)給定一個包含 0, 1, 2, ..., nn 個數的序列,找出 0 .. n 中沒有出現在序列中的那個數。

示例 1:

輸入: [3,0,1]輸出: 2

示例 2:

輸入: [9,6,4,2,3,5,7,0,1]輸出: 8

答:(超時)

class Solution(object): def missingNumber(self, n): """ :type nums: List[int] :rtype: int """ for i in range(len(n)+1): if i not in n: return i

答:

class Solution(object): def missingNumber(self, n): """ :type nums: List[int] :rtype: int """ a=sum(n) b=sum(range(len(n)+1)) return b-a

(278)你是產品經理,目前正在帶領一個團隊開發新的產品。不幸的是,你的產品的最新版本沒有通過質量檢測。由於每個版本都是基於之前的版本開發的,所以錯誤的版本之後的所有版本都是錯的。

假設你有 n 個版本 [1, 2, ..., n],你想找出導致之後所有版本出錯的第一個錯誤的版本。

你可以通過調用 bool isBadVersion(version) 介面來判斷版本號 version 是否在單元測試中出錯。實現一個函數來查找第一個錯誤的版本。你應該盡量減少對調用 API 的次數。

示例:

調用 isBadVersion(3) -> false調用 isBadVersion(5) -> true調用 isBadVersion(4) -> true所以,4 是第一個錯誤的版本。

答:

# The isBadVersion API is already defined for you.# @param version, an integer# @return a bool# def isBadVersion(version):class Solution(object): def firstBadVersion(self, n): """ :type n: int :rtype: int """ left=0;right=n while(True): mid=(left+right)//2 if isBadVersion(mid)==False and isBadVersion(mid+1)==True: return mid+1 elif isBadVersion(mid)==False and isBadVersion(mid+1)==False: left=mid elif isBadVersion(mid)==True and isBadVersion(mid+1)==True: right=mid

(283)

給定一個數組 nums,編寫一個函數將所有 0 移動到數組的末尾,同時保持非零元素的相對順序。示例:輸入: [0,1,0,3,12]輸出: [1,3,12,0,0]

答:

class Solution(object): def moveZeroes(self, n): """ :type nums: List[int] :rtype: void Do not return anything, modify nums in-place instead. """ a=n.count(0) while 0 in n: n.remove(0) n+=[0]*a

(290)

給定一種 pattern(模式) 和一個字元串 str ,判斷 str 是否遵循相同的模式。這裡的遵循指完全匹配,例如, pattern 里的每個字母和字元串 str 中的每個非空單詞之間存在著雙向連接的對應模式。示例1:輸入: pattern = "abba", str = "dog cat cat dog"輸出: true示例 2:輸入:pattern = "abba", str = "dog cat cat fish"輸出: false示例 3:輸入: pattern = "aaaa", str = "dog cat cat dog"輸出: false示例 4:輸入: pattern = "abba", str = "dog dog dog dog"輸出: false

答:

class Solution(object): def wordPattern(self, pattern, str): """ :type pattern: str :type str: str :rtype: bool """ l=str.split() if len(pattern)!=len(l): return False return len(set(zip(pattern,l))) == len(set(pattern)) == len(set(l))

(292)你和你的朋友,兩個人一起玩 Nim遊戲:桌子上有一堆石頭,每次你們輪流拿掉 1 - 3 塊石頭。 拿掉最後一塊石頭的人就是獲勝者。你作為先手。

你們是聰明人,每一步都是最優解。 編寫一個函數,來判斷你是否可以在給定石頭數量的情況下贏得遊戲。

示例:

輸入: 4輸出: false 解釋: 如果堆中有 4 塊石頭,那麼你永遠不會贏得比賽; 因為無論你拿走 1 塊、2 塊 還是 3 塊石頭,最後一塊石頭總是會被你的朋友拿走。

答:

class Solution(object): def canWinNim(self, n): """ :type n: int :rtype: bool """ return n%4!=0

推薦閱讀:

OpenCV3計算機視覺 Python語言實現(5)
Manager進程之間共享數據
茴香豆的「茴」的幾種寫法
Python數據分析數據化運營:商品數據化運營概述與關鍵指標
Django全棧教程系列番外篇 - ElasticSearch CheatSheet

TAG:Python | 編程語言 |