1.兩數之和css
給定一個整數數組 nums
和一個目標值 target
,請你在該數組中找出和爲目標值的那 兩個 整數,並返回他們的數組下標。node
你能夠假設每種輸入只會對應一個答案。可是,你不能重複利用這個數組中一樣的元素。算法
示例:數組
給定 nums = [2, 7, 11, 15], target = 9 由於 nums[0] + nums[1] = 2 + 7 = 9 因此返回 [0, 1]
class Solution(object): def twoSum(self, nums, target): """ :type nums: List[int] :type target: int :rtype: List[int] """ d = {} for i, num in enumerate(nums): if target - num in d: return [d[target - num], i] d[num] = i
2.兩數相加spa
給出兩個 非空 的鏈表用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式存儲的,而且它們的每一個節點只能存儲 一位 數字。code
若是,咱們將這兩個數相加起來,則會返回一個新的鏈表來表示它們的和。blog
您能夠假設除了數字 0 以外,這兩個數都不會以 0 開頭。leetcode
示例:字符串
輸入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 輸出:7 -> 0 -> 8 緣由:342 + 465 = 807
class Solution: def addTwoNumbers(self, l1, l2): """ :type l1: ListNode :type l2: ListNode :rtype: ListNode """ node1 = l1 node2 = l2 l3 = ListNode(0) l3.next = ListNode(0)#[0],[0]的特殊狀況 node3 = l3 sum1 = 0 coe = 1 while not node1 is None: sum1 += node1.val * coe coe *= 10 node1 = node1.next sum2 = 0 coe =1 while not node2 is None: sum2 += node2.val * coe coe *= 10 node2 = node2.next sum = sum1 + sum2 while sum > 0: node3.next = ListNode(sum % 10) node3 = node3.next sum //= 10 return l3.next
3.無重複字符的最長子串get
給定一個字符串,請你找出其中不含有重複字符的 最長子串 的長度。
示例 :
輸入: "abcabcbb" 輸出: 3 解釋: 由於無重複字符的最長子串是 長度爲 3。"abc",因此其
class Solution: def lengthOfLongestSubstring(self, s): """ :type s: str :rtype: int """ start = 0 max_length = 0 substring = {} for i, c in enumerate(s): if c in substring and start <= substring[c]:#只有當重複值是在start後面出現時才移動start start = substring[c] + 1#Slding Window的思想 else: max_length = max(max_length, i - start + 1) substring[c] = i return max_length
4.尋找兩個有序數組的中位數
給定兩個大小爲 m 和 n 的有序數組 nums1
和 nums2
。
請你找出這兩個有序數組的中位數,而且要求算法的時間複雜度爲 O(log(m + n))。
你能夠假設 nums1
和 nums2
不會同時爲空。
示例 1:
nums1 = [1, 3] nums2 = [2] 則中位數是 2.0
class Solution: def findMedianSortedArrays(self, nums1, nums2): """ :type nums1: List[int] :type nums2: List[int] :rtype: float """ nums = sorted(nums1+nums2) if len(nums)%2 ==0: answer = (nums[int(len(nums)/2-1)]+nums[int(len(nums)/2)])/2 else: answer = nums[int((len(nums)+1)/2)-1] return answer
5.最長迴文子串
給定一個字符串 s
,找到 s
中最長的迴文子串。你能夠假設 s
的最大長度爲 1000。
示例 1:
輸入: "babad" 輸出: "bab" 注意: "aba" 也是一個有效答案。
class Solution(object): def longestPalindrome(self, s): """ :type s: str :rtype: str """ left = right = 0 n = len(s) for i in range(n - 1): if 2 * (n - i) + 1 < right - left + 1: break l = r = i while l >= 0 and r < n and s[l] == s[r]: l -= 1 r += 1 if r - l - 2 > right - left: left = l + 1 right = r - 1 l = i r = i + 1 while l >= 0 and r < n and s[l] == s[r]: l -= 1 r += 1 if r - l - 2 > right - left: left = l + 1 right = r - 1 return s[left:right + 1]