ARTS-week31

Algorithms

Power of Two
思路: 如果一个数是2的次方数,它的二进数最高位一定为1,其它都为0,当减1时,最高位会降一位,其余为0的位会变为1,将两数相与会得到0。

1
2
3
4
5
6
class Solution {
public:
bool isPowerOfTwo(int n) {
return (n > 0) && (!(n & (n - 1)));
}
};

Palindrome Linked List
思路: 使用快慢指针找到链表中点后,将后半段的链表逆序,之后进行比较。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
bool isPalindrome(ListNode* head) {
if (head == NULL || head ->next == NULL) {
return true;
}
ListNode *mid = midList(head);
mid->next = reverseList(mid->next);
mid = mid->next;
while (head != NULL && mid != NULL) {
if(head->val != mid->val) {
return false;
}
head = head->next;
mid = mid->next;
}
return true;
}

ListNode *midList(ListNode *head) {
ListNode *slow = head;
ListNode *fast = head ->next;
while(fast != NULL && fast->next != NULL) {
slow = slow->next;
fast = fast->next->next;
}
return slow;
}

ListNode *reverseList(ListNode *head) {
ListNode *pre = NULL;
while(head != NULL) {
ListNode *temp = head->next;
head->next = pre;
pre = head;
head = temp;
}
return pre;
}
};

Review

本周阅读英文文章 A hacker intercepted your Wi-Fi traffic and stole your contacts, passwords, and financial data. Here’s how.

Technique

在执行du命令的时候遭遇了

1
2
$ du -sh ./*
- bash: /usr/bin/du: Argument list too long

顿时愣住,发生了啥这是,检查了一下,我进错目录了,打扰了,但是如上的报错是怎么回事?

查了一下:
https://stackoverflow.com/a/18647755
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=271588&archive=yes

那么看一下我使用的系统中ARG_MAX的值是多少:

1
2
$ getconf ARG_MAX
2097152

其实在APUE中也提到了ARG_MAX,在2.5节和8.10节中:
ARG_MAX: exec函数的参数最大长度(字节数)每个系统对参数表和环境表的总长度都有一个限制。在2.5.2节和表2-8中,这种限制是由ARG_MAX给出的

好的,我知道没认真看书了,都没记住😭😭😭,这次记住了…

Share

最近除了敲代码,就一直在和大量的数据打交道,因为数据来自外部,没人清楚里面的细节,那么举个栗子,一个压缩包4G,解压完毕22G,中间有多级目录,类似这样:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$ tree
.
├── abc
│   ├── 01
│   │   ├── aaa.pcap
│   │   └── bbb.pcap
│   └── 02
│   ├── ccc.pcap
│   └── ddd.pcap
└── def
├── 01
│   ├── aaa.pcap
│   ├── bbb.pcap
│   └── eee.pcap
└── 02
├── ccc.pcap
└── ddd.pcap

6 directories, 9 files

我需要将所有的pcap文件都移至另一个文件夹中(不存在子目录),没有去查看详细情况就进行了操作,在检查文件个数和存储空间大小的时候,发现只有1000多个文件,26M的大小,这肯定不对,瞬间想到文件重名的问题,抽查了几个,发现每个文件名都存在几千以上的同名文件并位于不同目录下,之后就更改处理方式得到解决。

那么这次的教训就是对于未知的数据,拿到手以后,要去做一个基础的了解,不能上来就想当然的去操作。