【筆試題中的演算法題】
1.【愛奇藝】N個盒子,第i個盒子是邊長為a[i]的立方體,如果一個盒子嚴格小於另一個盒子,並且大盒子裡沒有其他小盒子,小盒子沒放入大盒子中,那麼這個小盒子可以放入大盒子裡。可以根據條件任意放盒子,求最後能看見的最少盒子數量。(應該是求重複值最大的個數)先排序後求值
a = [1,2,2,3]
p = {}
for i in a:
p[i] = a.count(i)
k = 0
for key in p:
if p[key] > k:
k = p[key]
continue
print(k)
2.【愛奇藝】N種食物,排成一排,可以選擇若干種,但是不能選擇相鄰的食物,也可以不選,不選也是一種方法。
f(n) = f(n-1) + f(n-2)每加入一種食物,在f(n-1)的基礎上新增方法,因為不能取相鄰的,即f(n-2)種方法加入最後新增的一種食物。
N = 1 p = 2 N = 2 p = 3 N = 3 p = 5 N = 4 p = 8 N = 5 p = 12
a = [1,1]
for i in range(a):
a.append(a[-1] + a[-2])
3.【keep】求正整數n的二進位制數值中連續1的個數//13 1101 連續1為2 【做題首要思路很重要,開始想錯了,很難弄回來。110111】
n = 14 a = [] d = 0 b = 0 for i in range(0,32): c = n&1 a.append(c) n = n>>1 for i in range(len(a)): if a[i] == 1: b = b + 1 if a[i] == 0: if b > d: d = b b = 0 print(d)
4. 【keep】輸入一組有序資料,和一個值,若這個值在陣列中,返回陣列座標,若不在陣列中,插入資料,並返回插入資料座標。
def a(num,key):
if num[0] >=key or len(num) == 0:
return 0
for i in range(1,len(num)):
if num[i] >= key and num[i-1] < key:
return i
5. 【美團】在一組陣列中找到大於X的最小和。如 19 18 12 6 7 X= 20 則輸出值為24。(目前想到的辦法就是暴力破解TT)
(排列組合,找到最小滿足大於X的值
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import itertools
listp = [15,56,52,22]
x = 52
com = []#組合後的值
o = []##組合數
k = 1
for i in range(1,len(listp)+1):
a = list(itertools.combinations(listp,k))##排列組合
for i in a:
o.append(list(i))
k += 1
for i in o:
com.append(sum(i))
p = sorted(com))
for i in p:
if x<i:
print(i)
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
listp = [15,56,52,22]
x = 52
a = [0]
for i in range(len(listp)):
for j in range(len(a)):
a.append(listp[i]+a[j])
for i in range(len(a)):
for j in range(i,len(a)):
if a[i] >a[j]:
a[i],a[j] =a[j],a[i]
for i in a:
if x<i:
print(i)
break
6. 【美團】判讀序列是否存在迴路,序列按照編號順序顯示各位編號的度1 1 1 4 2 1
a = [1,1,1,4,2,1]
b = 4
for i in range(len(a)):
if a[i] <2:
a.pop(i)
7.【陌陌】題量比較大,時間比較短,但是程式設計也比較容易。三道程式設計。第三道沒寫出來,太緊張,自己時間也不夠。第一道,交換兩個整數位置,A了60%,可能有迴圈輸入這個坑吧,當時沒想到。第二道,abc字串的排列組合,用了前兩天學習的itertools.permutations方法,a。第三道,給出字串,從裡取出間隔為j的字串,輸出最大乘積
輸入一個字串,數值i大於-50,小於50,m是取數量大小,大於0小於50,j為字串間隔,
3 ##陣列個數
7 4 7 ##陣列
2 50 ##間隔為2 取出最多50個數
8.【貝殼】輸入‘0123+888-0x8555’ 0是八進位制,0x是十六進位制 888是十進位制,符號裡只有+ -
9.【貝殼】a 和b玩遊戲,a有X點hp,每次攻擊丟失A點生命值,攻擊完要冷卻C秒,b有Y點hp,每次攻擊損失B點生命值,攻擊完冷卻D秒,玩家hp小於0時死亡,a存活輸出sss,b存活輸出www,都是輸出die。
10.【貝殼】長度為N的整數序列A1到AN,AN=M,1<=Ai<=M,且Aj能被Ai+1整除(1<=i<=N)