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