【演算法】快速排序
【演算法】找出需要排序的部分的首尾索引
【演算法】n個繩子圍成若干個圈
【演算法】陣列劃分的價值
【演算法】字串排序後,根據末尾字母恢復原字串
【過去經歷】位元組資料開發實習中使用者增長方面,目標是什麼,指標是什麼,有什麼結論,結論有什麼應用
入職時間、實習時長、每週出勤情況等;
大小周是否能接受;
轉正意願、職業規劃(專業不契合)等;
上一段實習中的收穫、困難、leader評價等;
有沒有參與過實驗室專案,導師是誰;
給定乙個互不重複的整數陣列,編寫乙個函式,找出索引m和n,只要將索引區間[m,n]的元素排好序,整個陣列就是公升序的。注意:n-m盡量最小,也就是說,找出符合條件的最短序列。函式返回值為[m,n],若不存在這樣的m和n(例如整個陣列是公升序的),請返回[-1,-1]。
示例:解法:從頭往後找到第乙個倒序中第乙個元素的索引 i,從後往前找到第乙個倒序對中第二個元素的索引 j,取序列 i 和 j 之間的最大值和最小值,再從 i 往前找到比最小值小的索引,從 j 往後找到比最大值大的索引,返回這兩個值。注意找最大值和最小值的這一步,是一開始沒有想到的。[1, 2, 3, 4, 5] 返回 [-1, -1]
[1, 2, 5, 3, 4] 返回 [2, 4]
[1, 2, 5, 7, 6, 1, 9, 6, 3, 4, 8, 11] 返回 [2, 11]
class
solution
:def
sortindex
(self, lst:
list):
iflen
(lst)
<=1:
return[-
1,-1
]
i, j =0,
len(lst)-1
while i <
len(lst)-1
and lst[i]
<= lst[i+1]
: i +=
1if i ==
len(lst)-1
:return[-
1,-1
]while j >
0and lst[j]
>= lst[j-1]
: j -=
1
left_margin, right_margin =
min(lst[i:
(j+1)]
),max(lst[i:
[j+1]]
)while i >=
0and lst[i]
> left_margin:
i -=
1while j <=
len(lst)-1
and lst[j]
< right_margin:
j +=
1return
[i+1
, j-
1]
n根繩子,每根顏色互不相同,每根繩子的兩端也互不相同。要將其中的某些繩子連線成若干個圈(一根繩子自己首尾相連也視為乙個圈),問有多少種不同的方法。解法:遞迴的方法,n個繩子和n-1個繩子相比,第n個繩子可以自己圍成乙個圈,也可以分別用第n個繩子的頭部、尾部和n-1跟繩子中的每個繩子的尾部相連,視作一根繩子。注意是可以圍成若干個圈,而不只是圍成乙個圈。
給定包含n個元素的陣列,將其分割為m段,對每一段的和取最大值,即為這種劃分的價值。求一種劃分,使得對這個陣列而言,這種劃分的價值最小。
示例:陣列[5, 1, 4, 2, 3],可以劃分為 5 | 1 4 | 2 3,各段和分別為 5 5 5,這種劃分的價值為5,也可以劃分為 5 1 | 4 2 | 3,各段和分別為 6 6 3,這種劃分的價值為6,對這個陣列,劃分的價值最小即為5。解法:動態規劃,fij
f_fi
j表示對長度為 i 的陣列a做 j 次劃分的價值,則對長度為 i 的陣列做 j 次劃分可以視為將每次將最後乙個元素自己作為一段、和前面乙個元素作為一段、和前面兩個元素作為一段……前面剩下的元素們做 j-1 次劃分,即價值為將前 p 個元素做 j-1 次劃分的價值和p+1到n的元素求和取大,再對所有的p取最小。
f ij
=min
p∈[j
,i−1
]}
f_ = min_\,\sum_^ia_k\}\}
fij=m
inp∈
[j,i
−1]
}其它想法:給定乙個數p,問是否存在一種劃分,使得這個劃分的價值不超過p。基於貪心演算法,每次找最長的和不超過p的序列,看劃分m次後是否用完序列中的所有元素。需證明貪心演算法是有效的,即任意一種不能被貪心演算法找出的劃分都不符合題意,證明思路為基於貪心的劃分,其中每一段往後多納入乙個元素,這段的和都會超過p,往前多納入乙個元素也許不會超過p,但是最後剩下的那些元素還是沒有被塞入任何一段中,減少乙個或多個元素,也會導致更多的未被塞入任何一段的元素,因此貪心演算法是有效的。
基於以上提示,提出了以下想法,但都行不通:
給定乙個n個字串的序列,如n=4時,給定序列acbd,每次可以把這個序列最開頭的元素挪到末尾,得到解法:首先容易想到,對末尾字母排序,即為對應的n個序列的開頭,即有acbd
cbda
bdac
dacb
對這四個序列排序,得到
acbd
bdac
cbda
dacb
如果僅給定排序後序列的最後一位的字母,即dcab,能否還原出原序列(acbd、cbda、bdac、dacb均可)
axxd
bxxc
cxxa
dxxb
即原序列中,d後面是a,c後面是b,a後面是c,b後面是d,找到長度為2的子串,對沒有重複字元的字串,到此處即可恢復。
對有重複字元的字串,如ababcc,這種方法行不通,進一步思路為找到長度為2的子串後,依次找到長度為3的子串、長度為4的子串,直到找到長度為n的子串,即恢復。具體來講,每次找到長度為2的子串後,將末尾字元恢復到前面,再對字串做排序 ,排序後新的這些子串的末位字母就是題目給出的最後一位的字母,以此類推,直至獲取長度為n的子串。
class
solution
:def
strsort
(self, lst)
: lst_temp, i = lst,
1while i <
len(lst)
: lst_sort = lst_temp[:]
lst_sort.sort(
) lst_temp =
[lst[j]
+lst_sort[j]
for j in
range
(len
(lst))]
i +=
1 lst_temp.sort(
)print
(lst_temp[0]
)return lst_temp[0]
sl = solution(
)sl.strsort(
['c'
,'b'
,'a'
,'a'
,'c'
,'b'
])
位元組跳動 推薦演算法工程師面經
作者是研二的學弟,和號主一樣都為非科班,但是實力不容小覷,頂住壓力早早地在提前批收割了大廠的offer,可以說是 神仙學弟 了,方向為機器學習 資料探勘 nlp,同時也對推薦系統具有強烈的興趣,如下僅為部分面經,牆裂歡迎各網際網路大佬來撩!7.2更新,晚上7點終於收到了意向書,不用再反覆刷郵箱了 6...
位元組跳動 測試開發工程師 面經
自我介紹 作業系統 虛擬記憶體的概念 程序和執行緒 執行緒同步 如何實現執行緒同步 計算機網路 說一下tcp 為什麼是四次揮手呢 說乙個ip位址,如果第一位元組是269行不行 說一下http 自己講了get post 自己在專案中用過這些方法嗎 在頁面上點讚用了哪些方法 是不是有乙個功能是get和p...
華為面經(機器視覺演算法工程師)
一面是技術面,面試官是根據你簡歷上的東西來問的,問專案,問的很細。建議 要對簡歷上的東西了解的非常透徹 簡歷上要體現你的工作量,體現你做了哪些東西 要有和崗位要求匹配的專案,如果沒有,建議自己根據崗位要求做一兩個作品 你要對你這個領域的最新成果,突破有所了解 你要對你這個領域的最新應用有所了解,以及...