ARTS-week08

Algorithms

本周算法题:
Remove Duplicates from Sorted Array

思路:快慢指针遍历数组,如果两个指针指的数字相同,快指针向前+1,如果不同,快慢指针同时向前+1。快指针遍历数组完毕,慢指针+1就是数组中不同数组的个数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
if (nums.size() == 0) {
return 0;
}
int pre=0;
int n = nums.size();
for (int cur = 0; cur < n; ++cur) {
if (nums[pre] != nums[cur]){
nums[++pre] = nums[cur];
}
}
return pre + 1;
}
};

Remove Element
思路:遍历数组,判断给定值和当前的值是否相同。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
if (nums.size() == 0) {
return 0;
}
int i = 0;
int n = nums.size();
for (int j = 0; j < n; ++j) {
if (nums[j] != val) {
nums[i++] = nums[j];
}
}
return i;
}
};

Review

本周阅读英文文章 Is AI the Future of Cybersecurity?
网络中涌现出大量的个人数据,包括很多的敏感信息。网络攻击越来越普遍,个人信息可能会被窃取,直接影响到生活。很多人会在不同网站采用相同的密码,一旦个人泄漏或者其中一个服务商出现了泄漏数据的情况,就极大增加了风险。AI通过深度学习技术去理解用户行为,通过改进策略,来确定某人何时做出与平时不同的事情。AI通过快速检测非结构化和存在风险的数据,可以节省时间和金钱。但是AI并不能完全解决问题,目前看来,还需要做很多工作和时间用来适应变化和新技术。

Technique

序列化Python对象,将一个Python对象序列化为一个字节流,以便保存到一个文件、存储到数据库或者通过网络传输。

使用pickle模块,将一个对象保存到一个文件中:

1
2
3
4
5
6
7
8
9
>>> import pickle
>>> f = open("abc.txt", "wb")
>>> data = "hello world"
>>> pickle.dump(data, f)
>>> f.close()

>>> f = open("abc.txt", "rb")
>>> pickle.load(f)
'hello world'

有些类型的对象是不能被序列化的。通常为依赖外部系统状态的对象,比如打开的文件,网络连接,线程,进程,栈帧等等。用户自定义类可以提供__getstate__()__setstate__()方法来绕过这些限制。

对于大型的数据结构,比如使用array或numpy模块创建的二进制数组效率并不是一个高效的编码方式。如果需要移动大量的数据数据,最好先在一个文件中将其保存为数组数据块或使用更高级的标准编码方式如HDF5。

由于pickle是Python特有的并且附着在源码上,所有如果需要长期存储数据的时候不应该选用它。例如,如果源码变动了,所有的存储数据可能会被破坏并且变得不可读取。对于在数据库和存档文件中存储数据时,最好使用更加标准的数据编码格式如XML,CSV或JSON。

Share

在V2上看到一个帖子:有多少人觉得nftables比iptables更好?

之前并不知道nftables,看了wiki,了解到还有这个工具可以用。楼主还提供了性能测试的文章:
https://developers.redhat.com/blog/2017/04/11/benchmarking-nftables/

0%