0%

2018年 ARTS 周周享 (29)

Algorithm


存在重复元素

给定一个整数数组,判断是否存在重复元素。

如果任何值在数组中出现至少两次,函数返回 true。如果数组中每个元素都不相同,则返回 false。

示例 1:

输入: [1,2,3,1]
输出: true
示例 2:

输入: [1,2,3,4]
输出: false

来看我的第一次解答

1
2
3
4
5
6
7
8
9
10
11
func containsDuplicate(nums []int) bool {
numsLen := len(nums)
for i := 0; i < numsLen - 1; i++ {
for j := i + 1; j < numsLen; j++ {
if nums[i] == nums[j] {
return true
}
}
}
return false
}

来看看改良版本的

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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63

func containsDuplicate(nums []int) bool {
return findDup(nums, 0, len(nums))
}

func findDup(nums []int, start int, end int) bool {
if end - start < 2 {
return false
}

if end - start == 2 {
return nums[start] == nums[end-1]
}

m := (end+start)/2
nums[start], nums[m] = nums[m], nums[start]
i := start + 1
j := end -1
var mid int
for {
for i!=j {
if nums[i] == nums[start] {
return true
}
if nums[i] < nums[start] {
i++
} else {
break
}
}
for i!=j {
if nums[j]== nums[start] {
return true
}
if nums[j] > nums[start] {
j--
} else {
break
}
}
if i < j {
nums[i], nums[j] = nums[j], nums[i]
i++
j--
}
if i == j {
if nums[i] == nums[start] {
return true
}
if nums[i] < nums[start] {
mid = i+1
} else {
mid = i
}
break
} else if (i > j) {
mid = i
break
}
}
return findDup(nums, start+1, mid) || findDup(nums, mid, end)

}

利用 map 来做重复判断, 这个算是取巧吗? ^_^

1
2
3
4
5
6
7
8
9
10
11
12

func containsDuplicate(nums []int) bool {
numsMap:=make(map[int]bool)
for _,num:=range nums{
if _,ok:=numsMap[num];ok{
return true
}
numsMap[num]=true

}
return false
}

Review

本周在 golang 的一个中文社区进行 Iris 框架文档翻译。 传送门

希望不要误人子弟。本人很多也是多次斟酌,并且还参考了在线翻译, 以及维基百科。尽量做到好理解,不出错。(原谅本人英文水平确实有限)

Tip

这儿就记录一下,Docker 的不常用骚操作;

新建一个 镜像

Create a new image from a container’s changes

Commit

1
2
3
4
5
6

docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

# example

docker commit c3f279d17e0a microvision:v1

保存 Docker 镜像

Save one or more images to a tar archive (streamed to STDOUT by default)

Save

1
2
3
4
5
6

docker save [OPTIONS] IMAGE [IMAGE...]

# example

docker save -o image.tar microvision:v1

导出压缩包

Load an image from a tar archive or STDIN

Load

1
2
3
4
5
6

docker load [OPTIONS]

# example

docker load --input image.tar

Share

上一周提到了面试一个 4 年工作经验的 PHPer,而这一周,我又可以吹大牛了--本周面试了一个 8 年经验的 PHPer。

本人一向秉着,面试不是为了为难面试者,让他觉得不如自己。而是为了测试他的水平到底到哪儿?这样,就隐身出了两个方面。一、都会什么;二、不会什么。说白了,就是知识的边界在哪儿?

结合群里的参考,我就来说说此次的面试经历吧。

首先说下面试过程吧。我们这儿都是人事面试完直接把做的题和简历给我。看到简历的一瞬间,我是懵逼的,8年的经验。WTF,当时心里一下是这种感觉,然后见了面试者,说了一些简单的问题和他的经历。然后我就不知道该提问什么了?原本是计划招一个 1-3 年工作经验的,完全在意料之外,准备也不充分。

事后,在耗子读书群的群友的帮助下,结合自身的一点儿微末经验,总结了一些面试须知:

  • 面试需要量化考核,当然,这主要是说我这种野路子,凭感觉来的。
    • 基础块
      • 测试语法基础
      • 考察编程思想
    • 算法块
      • 考察编码风格
      • 算法逻辑
    • 场景块
      • 对实际工作中会出现的问题,是否能有效提供解决方案
  • 经验只是参考,更重要的与企业以及团队的匹配度
    • 会发现,有些人更重视应用和业务
    • 有些人基础扎实,但是并不关注于业务
  • 对知识的理解是否透彻
    • 是否浮于表面,这点考察很重要,奈何想考察出来,也得下点儿功夫的