2019快手春招笔试编程题【Python】
- 统计一个数组中出现奇数次的数字,只出现了一次。
解:
笨办法:统计数组出现的次数,然后判断是否为奇数。存在的问题:运行时间和复杂度不合格。
import sys
n = int(input())
data = map(int, raw_input().split())
m = set(data)
dict = {}
for i in m:
dict[i] = data.count(i)
if dict[i]%2 == 1:
print i
break
另外一种极其简单的办法,使用异或运算
eg. 1^1 = 0 ; 2 ^ 2 = 0; 3 ^ 2 ^ 2 = 3; 3 ^ 3 ^ 2 ^ 2 = 0;
异或满足结合律,所以偶数个会为0,奇数个为它本身。
import sys
n = int(input())
data = map(int, raw_input().split())
odd = 0
for i in data:
odd = odd ^ i
print odd
- 有一个长度为n的正整数序列,判断是否为非递减序列。如果其中有一个数是大于后一个数可以将其变为小的一个数。例如:[3, 4, 6, 5, 5, 5, 7, 8]可以将6换成4,那么数组是一组非递减序列。如果是非递减序列,那么输出1, 不是非递减序列输出0.
解:
主要使用逐个移动不重复比较的方法,并且记录后一项大于前一项的个数count,如果count<=1:那么就是非递减序列,如果count >1,证明至少有两次以上出现了递减情况。
import sys
data = map(int, raw_input().split())
count = 0
for i in range(n-1):
if data[i+1] < data[i]:
count += 1
if count > 1:
print 0
else:
print 1
3.设计一个计算器。
实现 + - × 运算。
eg. 1+1; 345; ((3-4)*2)*5这样的。
没做完,其实是自己数据结构学的很不好,几乎没有基础,有时间好好学习一下。