小白的秋招記錄——機試編程題(噹噹)

 

1、解析ip地址

給出一個字符串,僅包含整數,解析字符串,給出所有有效的ip地址組合

輸入描述: 字符串

輸出描述: 有效的ip地址字符串,多個字符串間用“ , ”分割

樣例輸入: 25525511135

樣例輸出: 225.225.11.135,225.225.111.35

備註: 字符串長度 7~15

思路:遞歸

代碼:

import sys
from copy import deepcopy
#global res
#global temp
def dfs(s, start, n):

    if n == 0 and start == len(s):
        res.append(deepcopy(temp))
        return
    if start >= len(s):
        return
    if len(s)-start<n:
        return
    if len(s)-start>n*3:
        return
    if s[start] == '0':
        temp.append('0')
        dfs(s, start+1, n-1)
        temp.pop()
    else:
        temp.append(s[start])
        dfs(s, start+1, n-1)
        temp.pop()
        temp.append(s[start: start+2])
        dfs(s, start+2, n-1)
        temp.pop()
        if int(s[start: start+3])<256:
            temp.append(s[start: start+3])
            dfs(s, start+3, n-1)
            temp.pop()
    return

s = sys.stdin.readline().strip()
global res, temp
res = []
temp = []
if len(s)>12:
    print ''
else:
    dfs(s, 0, 4)
print ','.join('.'.join(i) for i in res)

這裏有一個讓我調了半個小時的驚天大bug,一定要劃重點,我真的是太菜了,寫了這麼久python,這個都沒搞明白。

temp = [1,2,3]

res = [].append(temp)        # res = [[1,2,3]]

temp.pop()    # temp = [1,2],此時res也改變了 res = [[1,2]]

如果讓temp改變時,res不改變應該用res.append(deepcopy(temp))

 

2、數組排序

給出一個長度爲n的數組,其中的元素爲整數,取值0,1或者2,對數組進行原地排序,使得數組以0開始,中間是1,最後是2,不要使用排序函數解題,能否使用常量空間,僅遍歷數組一次,來解決本題?

輸入描述:整數數組,元素爲0,1,2

輸出描述:整數數組

樣例輸入:2,0,2,1,1,0

樣例輸出:0,0,1,1,2,2

代碼:

import sys
l = map(int, sys.stdin.readline().strip().split(','))
temp = [0]*3
ans = ''
for i in l:
    temp[i] += 1
for i in range(3):
    ans += str(i) * temp[i]
print ','.join(list(ans))

 

再記錄兩道單選:

step1: a*a = 144

step2: a -= (a*a) = 12 - 144 = -132

step3: a += (a -= (a*a)) = -264

這題有兩個疑問:

在c++中輸出是-264,爲什麼在python2.7下會報錯(SyntaxError: invalid syntax)(求大佬解答)

另一個問題是 step3爲什麼是 a += (a -= (a*a)) = -132 -132 = -264 不是 12 - 132 = -120呢

組裏的大佬告訴我:

a在第二步因爲有賦值操作,所以a的值已經改變了,比如 a=1, a+=a+=1後,a=4。

 


鏈地址算法的基本思想是將所有哈希地址爲i的元素構成一個稱爲同義詞鏈的單鏈表,並將單鏈表的頭指針存在哈希表的第i個單元中,因而查找、插入和刪除主要在同義詞鏈中進行。鏈地址法適用於經常進行插入和刪除的情況。插入新數據項的時間隨裝載因子線性增長。

裝填因子:a=n/m  其中n 爲關鍵字個數,m爲表長。

裝填因子是表示Hash表中元素的填滿的程度。裝填因子越大,填滿的元素越多,好處是空間利用率高了,但衝突的機會加大了。反之,裝填因子越小,填滿的元素越少,好處是衝突的機會減小了,但空間浪費多了。

衝突的機會越大,則查找的成本越高。反之,查找的成本越小。因此,必須在 "衝突的機會"與"空間利用率"之間尋找一種平衡與折中。 這種平衡與折中本質上是數據結構中有名的"時-空"矛盾的平衡與折中。

 

機試時只A了第二題,第一題考試結束後才寫出來,試了幾組數據和邊界條件都沒有問題,但是不能保證通過全部測試樣例。

語言:python2.7

職位:算法工程師

時間:9.2

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章