1. 程式人生 > >高階程式設計技術 Python 第九周作業

高階程式設計技術 Python 第九周作業

Move Zeroes (#283)

來源:https://leetcode.com/problems/move-zeroes/description/

題意:

給定一個數組 nums,編寫一個函式將所有 0 移動到陣列的末尾,同時保持非零元素的相對順序。

示例:

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

分析:

訪問一遍陣列,記錄0的個數tot,並在陣列末尾append上tot個0,最後remove去tot個0。利用list的remove函式功能,每次刪去的都是陣列中的第一個0,不會把末尾的0刪去。

def moveZeroes(self, nums):
    """
    :type nums: List[int]
    :rtype: void Do not return anything, modify nums in-place instead.
    """
    n = len(nums)
    tot = 0
    for i in range(0, n):
        if nums[i] == 0:
            nums.append(0)
            tot = tot+1
    for i in range(0, tot):
        nums.remove(0)

狀態:


這種方式看起來比較慢,排在leetcode榜的很後面。

Search Insert Position (#35)

來源:https://leetcode.com/problems/search-insert-position/description/

題意:

給定一個排序陣列和一個目標值,在陣列中找到目標值,並返回其索引。如果目標值不存在於陣列中,返回它將會被按順序插入的位置。

你可以假設陣列中無重複元素。

分析:簡單的二分查詢。

def searchInsert(self, nums, target):
    """
    :type nums: List[int]
    :type target: int
    :rtype: int
    """
    l = 0
    r = len(nums)-1
    while l <= r:
        mid = int((l+r)/2)
        if nums[mid] < target:
            l = mid+1
        else:
            r = mid-1
    return l
    

狀態: