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主页,各位程序员节日快乐!

    原文作者:算法
    原文地址: https://www.twblogs.net/a/5bd3bf692b717778ac20c96b
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞