1. 程式人生 > >python程式設計師的1024

python程式設計師的1024

今天是10.24日,程式設計師節日。記錄一下今日工作和學到的東西吧
樹莓派的gpiozero介面。這個有一個官方文件 文件很容易學習。因為硬體的問題和拍攝時候的一些反光問題,專案在緩慢推進中。。。

gpiozero是幹嘛用的?就是操作樹莓派的介面。樹莓派上的引腳就是一個一個的介面。具體的用途和用法自行學習官網。當用線連線之後,或者你再有點led燈,自己做一個監控都沒問題。當然,這個需要焊接,如果不焊接引腳的話,容易接觸不良。

我這裡參考官網寫了一個觸發按鈕進行拍照的程式碼。

from gpiozero import Button     # 匯入Button, 在兩個線碰到一起的時候進行拍照或者按下按鈕的時候進行拍照。
from picamera import PiCamera import os import time button = Button(2) camera = PiCamera(resolution=(2048, 2048)) def capture_photo(): filename = "{}.jpg".format(int(time.time()) % 86400) camera.capture(filename) print("finshed take photo !!!") while True: button.when_pressed = capture_photo

今天刷了好幾道題,這裡也整理一下。我刷題都是刷的leetcode上的。下面直接說題號。

88題,題意要求是給定兩個陣列a, b. 其中a的真實長度是a裡面的元素+b裡面的元素,兩個陣列都是有序的。現在需要把b數組裡面的資料合併到a數組裡面中,不能使用新的空間,只能對a陣列本身進行修改。

我這裡有兩種做法,

一種方式是直接把num2追加到num1中,sort(num1)

另外一種方式可以通過歸併操作,以此遍歷兩個陣列最後的元素(一定要倒序遍歷才行,最後判斷沒有遍歷完的列表是不是num1, 如果不是,就把num2的賦值給num1)

215題, 題意要求是求一個列表當中第k大的值。

這裡有四種思路(1. 直接對列表進行排序。2. 最小堆的方法。 3. 最大堆的方法。 4. 採用快排的思路)
對列表進行排序很容易,直接返回len-k的座標即可。而最小堆和最大堆的方式,python裡面有一個heapq,可以直接拿來用。關於最小最大堆,我還沒深入去看,這裡後面會單獨發部落格。還有一種方法是快排的方式。 快速排序,這個程式碼還是非常值得學習的。特別是演算法導論裡面優化過的快排演算法。

這裡貼一下程式碼,實現原理就是i是下標,裡面會儲存大於x的數,如果遇到小於x的數,就把i加1(i++1才是當前的真正的位置,因為i是從-1開始的),然後交換位置。

def quick_sort(array, l, r):
    if l < r:
        q = partition(array, l, r)
        quick_sort(array, l, q - 1)
        quick_sort(array, q + 1, r)

def partition(array, l, r):
    x = array[r]
    i = l - 1
    for j in range(l, r):
        if array[j] <= x:
            i += 1
            array[i], array[j] = array[j], array[i]
    array[i + 1], array[r] = array[r], array[i+1]
    return i + 1

array = [2, 4, 9, 8, 7, 3, 2, 6]
print(partition(array, 0, len(array) - 1))

https://leetcode.com/problems/missing-number/
這個題,是給你一個數組,類似[2, 6, 4, 3, 5, 0], 然後讓你找中間的缺失值。這裡缺少1.
題目要求的是從0開始,而且如果出現[0,1,2]這種情況, 你應該返回3才對。我最開始題意沒看清楚,踩了很多坑。猛然回頭才發現,這題就是個數學題。然後就用了O(1)的時間複雜度搞定了.可以做一下試試。

167題
這個題是給你一個有序的陣列,然後讓你找出兩個值的和等於目標值。要求你返回的兩個值的下標index1<index2.

題目告訴你可以預設認為只有一個符合題意的要求。第一道題也是類似的,但是需要注意的是,這道題是有序的陣列?
怎麼搞?溫馨提示:有序的話,就要想一想二分排序。

還看了一下三路快排,沒有親自實踐,這裡就不寫了。有空還會繼續刷題。一個經驗就是,當我刷的題越多,看到題之後,就沒那麼慫了,好好想想就能想出來答案。而且做的越多,思維就會變的很靈活。工作中用到了也能對介面進行優化,讓速度更快!加油!

這裡是我的leetcode主頁,各位程式設計師節日快樂!