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主頁,各位程序員節日快樂!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章