simple_d20190530

14. Merge Sorted Array

class Solution:
    def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:
        """
        Do not return anything, modify nums1 in-place instead.
        最大的数依次插入后面
        """
        while n>0:
            if m<=0 or nums2[n-1]>=nums1[m-1]:
                nums1[m+n-1] = nums2[n-1]
                n -= 1
            else:
                nums1[m+n-1] = nums1[m-1]
                m -= 1
                

15. Merge Two Sorted Lists

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:
        head =  cur = ListNode(0)
        while l1 and l2:
            if l1.val<l2.val:
                cur.next = l1
                l1 = l1.next
            else:
                cur.next = l2
                l2 = l2.next
            cur = cur.next
        cur.next = l1 or l2
        return head.next

16. 118. Pascal's Triangle

class Solution:
    def generate(self, numRows: int) -> List[List[int]]:
        if numRows==0: return list()
        res = [[1]]
        for i in range(1, numRows,1):
            size = i+1
            l = [1]
            for j in range(1,size-1,1):
                l.append(res[i-1][j-1]+res[i-1][j])
            l.append(1)
            res.append(l)
        return res

17.119. Pascal's Triangle II

class Solution:
    def getRow(self, rowIndex: int) -> List[int]:
        '''
        看 discussion 用的一个没想到的技巧
        '''
        res = [1]
        for _ in range(rowIndex):
            res = [ x+y for x,y in zip( [0]+res, res+[0])]
        return res

18. 121. Best Time to Buy and Sell Stock

class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        max_profit = 0
        min_price = float('inf')
        for price in prices:
            min_price = min(price,min_price)
            profit = price - min_price
            max_profit = max(max_profit,profit)
        return max_profit

19. 122. Best Time to Buy and Sell Stock II

class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        '''
        peak and vally
        '''
        max_profit=0
        for i in range(0,len(prices)-1):
            if prices[i]<prices[i+1]:
                max_profit += prices[i+1]-prices[i]
        return max_profit

20. 169. Majority Element

class Solution:
    def majorityElement(self, nums: List[int]) -> int:
        nums.sort()
        return nums[ len(nums)//2]

21. 229. Majority Element II

class Solution:
    def majorityElement(self, nums: List[int]) -> List[int]:
        candiate1,candiate2,count1,count2=0,1,0,0
        for n in nums:
            if n==candiate1:
                count1 +=1
            elif n==candiate2:
                count2 +=1
            elif count1==0:
                candiate1=n
                count1 =1
            elif count2==0:
                candiate2=n
                count2 =1
            else:
                count1 -=1
                count2 -=1
        res = []
        for n in [candiate1,candiate2]:
            if nums.count(n)>len(nums)//3:
                res.append(n)
        return res
        

22.189. Rotate Array

class Solution:
    def rotate(self, nums: List[int], k: int) -> None:
        """
        Do not return anything, modify nums in-place instead.
        1. o(n)空间,O(n)时间
        """
        n = len(nums)
        k = k%n
        res=[0 for i in range(n)]
        for i in range(n):
            idx = (i+k)%n
            res[idx]=nums[i]
        for i in range(n):
            nums[i]=res[i]
class Solution:
    def rotate(self, nums: List[int], k: int) -> None:
        """
        Do not return anything, modify nums in-place instead.
        1. o(n)空间,O(n)时间
        2. o(1),O(n)
        """

        def reverse(nums,start,end):
            while start<end:
                nums[start],nums[end]=nums[end],nums[start]
                start += 1
                end -= 1
                
        n = len(nums)
        k = k%n
        reverse(nums,0,n-1)
        reverse(nums,0,k-1)
        reverse(nums,k,n-1)

23. 217. Contains Duplicate

class Solution:
    def containsDuplicate(self, nums: List[int]) -> bool:
        return True if len(nums)>len(set(nums)) else False

24.219. Contains Duplicate II

class Solution:
    def containsNearbyDuplicate(self, nums: List[int], k: int) -> bool:
        dic = {}
        for i,n in enumerate(nums):
            if n in dic and i-dic[n]<=k:
                return True
            else:
                dic[n] =i
        return False
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容