这两天在面试找新工作,遇到了两个面试题,虽然简单,但是感觉很有意思,记录一下。
一个会计题
- 一双鞋进价 25 元,卖价 32 元,顾客买一双鞋给了老板 100 元,老板没有零钱就去邻居那里拿这 100 元换了零钱、然后找了顾客 68 元,顾客走后,邻居发现这 100 元为假钱老板没有办法又给了邻居100元,请问老板总共损失了多少钱?
1 | 这题算是一道会计题,只需要区分出出入即可: |
一个简单的取重复数值算法
- 有两个数组,都是按大小正向排列且数组内无重复元素,例如a=[0,2,8,11,32];b=[2,11,55,87],请使用任意一种语言找到两个数组之间相等的元素,要求不要调用任何系统函数,不要使用循环嵌套即算法复杂度为 O(n);
hash方式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21def find_common_elements(a, b):
# 使用哈希表存储第一个数组的元素
hash_table = {}
for element in a:
hash_table[element] = True
# 遍历第二个数组,找到相等的元素
common_elements = []
for element in b:
if element in hash_table:
common_elements.append(element)
return common_elements
# 示例数组
a = [0, 2, 8, 11, 32]
b = [211, 55, 8, 87]
# 调用函数
result = find_common_elements(a, b)
print("两个数组之间相等的元素:", result)双游标方式
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
29def find_common_elements_two_pointers(a, b):
# 初始化两个指针
pointer_a = 0
pointer_b = 0
common_elements = []
# 遍历两个数组,直到任意一个指针到达数组末尾
while pointer_a < len(a) and pointer_b < len(b):
if a[pointer_a] == b[pointer_b]:
# 如果两个指针指向的元素相等,加入结果列表并移动两个指针
common_elements.append(a[pointer_a])
pointer_a += 1
pointer_b += 1
elif a[pointer_a] < b[pointer_b]:
# 如果 a 的当前元素小于 b 的当前元素,移动 a 的指针
pointer_a += 1
else:
# 如果 b 的当前元素小于 a 的当前元素,移动 b 的指针
pointer_b += 1
return common_elements
# 示例数组
a = [0, 2, 8, 11, 32, 87, 211, 1234]
b = [8, 32, 87, 211, 235, 987, 1234]
# 调用函数
result = find_common_elements_two_pointers(a, b)
print("两个数组之间相等的元素:", result)
两道题目本身就是很简单的题目,但是他真的可以避免混水摸鱼的那些家伙,也就是口头很秀实际能力不怎么样的那伙人,这两个题目跟我之前看到的另一个题目很相似。
Fizz Buzz
- 如果一个数字能被 3 整除,输出 “Fizz”。
- 如果一个数字能被 5 整除,输出 “Buzz”。
- 如果同时能被 3 和 5 整除,输出 “FizzBuzz”。
- 如果以上条件都不满足,则输出数字本身。
1 | for (int num = 1; num <= 20; num++) { // 你可以调整范围 |
这道题能够考察多个编程和逻辑相关的知识点。
- 能否清晰地理解题目要求,并将其转换为程序逻辑。
- 对基础语句的熟练使用。
- 对数组边界的处理。
- 考察题目完成的时间。
总之我觉得在面试的时候,有这种笔试很有意思,没有很高的难度,但在工作中完全够用。