筆試題 | 數(shù)據(jù)挖掘崗位 | 數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)處理

這段時(shí)間,在北京游蕩了好幾圈,黑了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

題目解讀:

給定一個(gè)數(shù)組,找出兩個(gè)數(shù)的和等于給定的目標(biāo)值,返回兩個(gè)數(shù)的下標(biāo)
第一個(gè)數(shù)的下標(biāo)比第二個(gè)數(shù)的小
方案唯一:只存在一個(gè)解滿足和等于target
下標(biāo)計(jì)數(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í)這兩種方案可以解決多個(gè)解的問題喲。不信啊,你擼下代碼試試看。

第二題 時(shí)間數(shù)據(jù)處理

這里寫圖片描述

題目:以上為百度新聞的?幾個(gè)新聞檢索結(jié)果,對應(yīng)的新聞發(fā)布時(shí)間形式各不不相同,請編程對以上時(shí)間數(shù)據(jù)格式進(jìn)?行行轉(zhuǎn)換處理理,使其輸出格式為標(biāo)準(zhǔn)的”yyyy-MM-dd HH:mm:ss”格式

題目解讀:

1、需要處理的數(shù)據(jù)

  • xx秒前、xx分鐘前、xx小時(shí)前
  • 統(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í)中哪一種情況,之后將獲取的數(shù)字(字符格式)轉(zhuǎn)為數(shù)值格式,最后使用datetime包,利用當(dāng)前的時(shí)間來反向推出時(shí)間。代碼如下:

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:] == '小時(shí)':
        b = now - timedelta(minutes=int(a[:-2]))
        data.append(b.strftime("%Y-%m-%d %H:%M:%S"))

2、做格式轉(zhuǎn)換,將當(dāng)前的時(shí)間格式轉(zhuǎn)為我們預(yù)定的格式即可,這里仍是用到datetime包。發(fā)現(xiàn)了沒有,原數(shù)據(jù)是沒有秒級時(shí)間的,所以需要加上去。代碼如下:

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:] == '小時(shí)':
                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小時(shí)前','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),謝謝!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • http://192.168.136.131/sqlmap/mysql/get_int.php?id=1 當(dāng)給sq...
    xuningbo閱讀 10,563評論 2 22
  • sqlmap用戶手冊 說明:本文為轉(zhuǎn)載,對原文中一些明顯的拼寫錯(cuò)誤進(jìn)行修正,并標(biāo)注對自己有用的信息。 ======...
    wind_飄閱讀 2,207評論 0 5
  • 1.OC里用到集合類是什么? 基本類型為:NSArray,NSSet以及NSDictionary 可變類型為:NS...
    輕皺眉頭淺憂思閱讀 1,478評論 0 3
  • 國家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報(bào)批稿:20170802 前言: 排版 ...
    庭說閱讀 12,443評論 6 13
  • 簡介 用簡單的話來定義tcpdump,就是:dump the traffic on a network,根據(jù)使用者...
    保川閱讀 6,086評論 1 13

友情鏈接更多精彩內(nèi)容