leetcode 454 4Sum II
首先想到的是四维循环。。。 但很明显❎️
大部分算法都是将问题的规模变小,然后将小问题组合成为最后需要问题的解
将前两个 vector
中所有数字组合的和记录到一个哈希表中,然后在后两个 vector
中找是否有数字和哈希表中的数字成相反数就可以了
复杂度: 遍历两个 vector
复杂度是 \(N^2\) ,所以最后的复杂度也就是 \(O(n^2)\)
首先想到的是四维循环。。。 但很明显❎️
大部分算法都是将问题的规模变小,然后将小问题组合成为最后需要问题的解
将前两个 vector
中所有数字组合的和记录到一个哈希表中,然后在后两个 vector
中找是否有数字和哈希表中的数字成相反数就可以了
复杂度: 遍历两个 vector
复杂度是 \(N^2\) ,所以最后的复杂度也就是 \(O(n^2)\)
比较简单的题目
迭代写法:
1 | /** |
递归写法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* reverseList(ListNode* head) {
if(head==NULL||head->next==NULL) return head;
ListNode* newhead=reverseList(head->next);
head->next->next=head;
head->next=NULL;
return newhead;
}
};
没得思路,猜一下,将排序链表平分,前面的作为左子树,后面的作为右子树,中间的作为根节点。
找链表中间的节点的思路: 前两篇提到过,快慢指针
1 | /** |
最快的代码是利用数字表示位置,逐步逼近链表中点的,不过优化的效果不是很明显(小声比比),不优化了
列表的题目好多都是利用快慢指针来进行的,这个也不例外
分别设置一个快指针,一个慢指针,快指针每次走两步,慢指针每次走一步,假如慢指针最终和快指针相遇,则证明有环
1 | /** |
Example 1:
Given 1->2->3->4, reorder it to 1->4->2->3.
Example 2:
Given 1->2->3->4->5, reorder it to 1->5->2->4->3.
看题目要求很好看懂,就是将一个链表分为两个部分,后面的部分倒序依次插入到前面的链表中。
昨天小伙伴要我帮忙写一个网页用来查询成绩,给的格式xlxs文件,我一想,思路很简单: 1. 把数据转换成数据库 2. 写个表单,传递查询学号 3. 后台用数据库查询 4. 把网站部署到服务器上
于是就有....
本身数据就没有多少,所以我决定使用sqlite3,完全够用,有三种思路:
1. Excel文件另存为csv文件,然后使用sqlite导入 .import data.csv tablename
2. 使用openpyxl库读取Excel文件,然后逐条插入到数据库中 3. 但我google发现了一个xls2db的库,使用两行代码进行转换 from xls2db import xls2db xls2db("data.xlxs","student.db")
因为使用c/c++的话,图形库要么太大材小用,要么就是太古老,因此决定使用python 的pillow库来实现文章中的算法,但是后来发现pyplot库比较形象
我们都知道显示器显示的画面都是由像素组成的,像素都是一个一个小的方块组成的,而我们之所以感觉不到方块的存在的原因是像素方块足够小,同样大小的屏幕,像素点越小,也就是分辨率越高,画面也更好。那么计算机是怎样画出一条直线的呢? 上面图就是我们平时看到的直线的像素组成,一条直线其实是由许多像素方块组成的,那么怎么计算涂那些像素方块,才可以让最后的“直线”更像直线呢?
按照正常思路,一条直线的方程是点斜式方程,(y=kx+b)
这篇文章只是分析一下这个问题的原因,并没有真正的解决!! sscap 作为shadowsocks的替代品可以说是非常棒的,可以批量导入大量的节点,然后批量ping检测,找出能用的节点,假如找到免费的大量ssr节点,用起来超级爽,但是也有好多问题,其中一个问题就是sscap 关闭之后再次打开有时候会提示端口占用。
经常有那么几次,关闭之后,再次打开就会提示端口占用,可是没有什么端口使用1080了啊?于是我打开 process hacker 2,发现有几个连接处于 waiting connection 的状态,于是就等啊等,一直等到这几个连接从等待状态彻底关闭。今天看《python 网络编程》突然看到一段话,瞬间想到这个问题。
tcp 的关闭是四次握手,但是最后一次握手是否能够正常发送到对面呢?这个是无法保证的。比如说
上图中的最后一个ACK包从A发送到B,如何确保B收到呢?假如使B接收到最后一个ACK包时,再回复A一个数据包,那么有怎样确保A能收到这个数据包呢?这样就变成了一种死循环。所以说tcp 的关闭其实并不是绝对可靠的。因此在应用程序关闭套接字之后,操作系统会接手这些套接字,修改他们的状态为“等待”,这个状态持续大约4分钟,或短或长,之后操作系统才会真的关闭他们。
群里突然有小伙伴问起 rfc 822/2822 时间格式,瞬间百度了一下,然后就决定了google一下,搜索了官方的RFC文档,耐心地思考了一下RFC时间格式的阅读方法,做个笔记吧!
以 RFC 2822 时间格式做个例子: 文档位置
php中的时间格式(参考对照)
1 | 3.3. Date and Time Specification |
想去爬泰山很久了,几年前下定了决心,结果一场雨直接浇灭了爬泰山的热情,拖来拖去,一直到了前几天,天时地利人和,万事俱备,只差行动了。
2018-9-22 10 点左右出发,在中午搭乘火车。火车上看了《人类清除计划4》,发现是一步妥妥的烂片,什么鬼东西,电影的主要内容就是走火入魔的科学家想要通过让人类自相残杀来减少人口,一个在街头卖毒品的黑社会大哥毅然决然地开始拯救人类。这种电影居然能拍第四部,简直是一件奇事。由于影片太烂,断断续续分了好多次看完的。
不知道原始社会的人类有没有所谓的空闲时间,还是需要一直忙碌着准备食物,维持生存。想起《禅与摩托车维修手册》中的一段话,大意是汽车旅行中,汽车与旅途中的自然景物是有很大距离的,因为车可以作为一个封闭的空间,人在空间内,旅途的景色在空间外。而骑摩托车旅行是与景色没有距离的,摩托车与人是在景色的空间里面的。现在换成了火车,火车车厢密闭狭小的空间,加上人们可以通过手机自给自足,所以人们可以毫无交流地坐在一起5、6个小时。所以坐火车是一件非常无聊的事情,要么玩手机,要么玩kindle,除此之外,最大的乐趣就是观察人了,比如座位对面玩王者荣耀的小哥手上布满了好看的纹身,手指上还有一个酷酷的十字架;斜后方有个高中生在背诵文言文等等。