這段時間琳钉,在北京游蕩了好幾圈蛛倦,黑了3層皮,做了好幾家的筆試題及皂,我將整理分享出來且改,以供大家求職找工作參考。
寫這篇文章前又跛,發(fā)生了這樣的一段對話,只是為了擼串的交易
周末擼串吃什么味的好呢感混?要好好砍他一頓(陰笑臉)礼烈。好了,開始正文下面的內(nèi)容此熬。
第一題 兩數(shù)的和
Given an array of integers, find two numbers such that they add up to a specific target number.The function twoSum should return indices of the two numbers such that they addup to the target, where index1 must be less than index2. Please note that your returned answers (both index1 and index2) are not zero-based.You may assume that each input would have exactly one solution.Input: numbers={2, 7, 11, 15}, target=9 Output: index1=1, index2=2
題目解讀:
給定一個數(shù)組,找出兩個數(shù)的和等于給定的目標(biāo)值募谎,返回兩個數(shù)的下標(biāo)
第一個數(shù)的下標(biāo)比第二個數(shù)的小
方案唯一:只存在一個解滿足和等于target
下標(biāo)計數(shù)不是從0開始
思路一:暴力法
對所有的元素遍歷,將滿足條件的打印出來驮审。這種方法的復(fù)雜度高吉执,適合小數(shù)組。圖解如下:
試著來用python實(shí)現(xiàn)下:
# -*- coding: utf-8 -*-
def twoSum(value,target):
if ((value == None) or (len(value) < 2)):
return ("zeros or length is too small")
else:
lena = len(value)
for i in range(lena):
for j in range(i+1,lena):
if value[i] + value[j] == target:
print ("the two number are %d and %d ,the index are %d and %d " % (value[i],value[j],i,j))
if __name__ == "__main__":
a = [2,7,6,1]
target = 9
print (twoSum(a,target))
還能不能調(diào)整下代碼呢熙掺?優(yōu)化代碼咕宿,減少復(fù)雜度呢?我想了想府阀,要是原數(shù)組是排好序的該多好啊,那就不容易多了董瞻。
思路二 :排序法
嘿嘿田巴,說干就干,來把它實(shí)現(xiàn)下壹哺。代碼如下:
# -*- coding: utf-8 -*-
res = []
def sum_two_1(a,target):
if (len(a) < 2):
return (0)
a1 =sorted(a)
i=0;j=len(a1)-1;k=0;
while(i<j):
if (a1[i]+a1[j] == target):
k=k+1
res.append([a1[i],a1[j],a.index(a1[i])+1,a.index(a1[j])+1])
i = i + 1
j = j -1
elif(a1[i]+a1[j] > target):
j = j -1
else:
i = i +1
return(res)
if __name__ == "__main__":
a = [1,8,3,5]
print(sum_two_1(a,int(4)))
好了管宵,就先這兩種方案。你看到?jīng)]箩朴?其實(shí)這兩種方案可以解決多個解的問題喲。不信啊沈堡,你擼下代碼試試看燕雁。
第二題 時間數(shù)據(jù)處理
題目:以上為百度新聞的?幾個新聞檢索結(jié)果鲸拥,對應(yīng)的新聞發(fā)布時間形式各不不相同僧免,請編程對以上時間數(shù)據(jù)格式進(jìn)?行行轉(zhuǎn)換處理理,使其輸出格式為標(biāo)準(zhǔn)的”yyyy-MM-dd HH:mm:ss”格式
題目解讀:
1懂衩、需要處理的數(shù)據(jù)
- xx秒前、xx分鐘前牵敷、xx小時前
- 統(tǒng)一格式:轉(zhuǎn)換為yyyy-MM-dd HH:mm:ss
2法希、不一致的數(shù)據(jù)處理
將xx秒前等數(shù)據(jù)與xx年xx月xx日 xx:xx數(shù)據(jù)處理成格式一致的
分析:
1、先判斷是否有前字存在苫亦,再來判斷是秒、分鐘润匙、時中哪一種情況唉匾,之后將獲取的數(shù)字(字符格式)轉(zhuǎn)為數(shù)值格式,最后使用datetime包肄鸽,利用當(dāng)前的時間來反向推出時間油啤。代碼如下:
if i[-1] == '前':
a = i.split("前")[0]
if a[-1] == '秒':
b = now - timedelta(seconds=int(a[:-1]))
data.append(b.strftime("%Y-%m-%d %H:%M:%S"))
if a[-2:] == '分鐘':
b = now - timedelta(minutes=int(a[:-2]))
data.append(b.strftime("%Y-%m-%d %H:%M:%S"))
if a[-2:] == '小時':
b = now - timedelta(minutes=int(a[:-2]))
data.append(b.strftime("%Y-%m-%d %H:%M:%S"))
2、做格式轉(zhuǎn)換逮诲,將當(dāng)前的時間格式轉(zhuǎn)為我們預(yù)定的格式即可幽告,這里仍是用到datetime包。發(fā)現(xiàn)了沒有冗锁,原數(shù)據(jù)是沒有秒級時間的,所以需要加上去箍邮。代碼如下:
time_str1 = i + ":00"
time = datetime.strptime(time_str1, '%Y年%m月%d日 %H:%M:%S')
data.append(time.strftime("%Y-%m-%d %H:%M:%S"))
你對兩類情況都做了分析,還寫了代碼锭弊,是否可靠呢?要不拉出來跑一跑結(jié)果味滞,怎么樣?哼昨凡,誰怕誰呢攒暇?來上代碼:
# -*- coding: utf-8 -*-
from datetime import datetime
from datetime import timedelta
def date_deal1(time_str):
now = datetime.now()
data = []
for i in time_str:
if i[-1] == '前':
a = i.split("前")[0]
if a[-1] == '秒':
b = now - timedelta(seconds = int(a[:-1]))
data.append(b.strftime("%Y-%m-%d %H:%M:%S"))
if a[-2:] == '分鐘':
b = now - timedelta(minutes = int(a[:-2]))
data.append(b.strftime("%Y-%m-%d %H:%M:%S"))
if a[-2:] == '小時':
b = now - timedelta(minutes = int(a[:-2]))
data.append(b.strftime("%Y-%m-%d %H:%M:%S"))
else:
time_str1 = i + ":00"
time = datetime.strptime(time_str1, '%Y年%m月%d日 %H:%M:%S')
data.append(time.strftime("%Y-%m-%d %H:%M:%S"))
return data
if __name__ == "__main__":
time_str = ['2017年07月16日 21:00','6分鐘前','20小時前','6秒前']
print (date_deal1(time_str))
測試結(jié)果
['2017-07-16 21:00:00', '2017-07-24 17:08:05', '2017-07-24 16:54:05', '2017-07-24 17:13:59']
你看,是不是很符合要求啊就轧。歡迎指正不足點(diǎn)田度,謝謝!