国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

Python編程面試前要解決的10個算法

開發 后端 算法
在本文中,我分享了10種Python算法的解決方案,這些解決方案是面試時經常遇到的問題。如果您正在準備與知名技術公司的面試,那么本文是您熟悉常見算法模式然后轉向更復雜問題的一個很好的起點。

Python編程面試前要解決的10個算法

為什么練習算法是關鍵?

別像我剛開始解決問題時那樣天真。盡管我認為時不時地破解幾個算法很有趣,但我從來沒有花太多時間去實踐,只為解決問題,其他什么都不顧,可能有時候馬馬虎虎解決了問題,但不明白為什么這樣。對于我自己,我一直在想,在一天結束時,整天求解算法有點太呆板了,它在實際的日常工作環境中并沒有實際的用途,從長遠來看,它也不會給我帶來多少好處。

“在求職過程中,了解如何求解算法會給你帶來競爭優勢”

但事實上,作為程序員,每天的工作中都會出現復雜的問題,大公司必須找到一個標準化的流程來收集求職者解決問題的洞察力和對細節技能的關注。這意味著,在求職過程中,了解如何求解算法將給你帶來競爭優勢,因為即使是不太出名的公司也傾向于采用類似的評估方法。

在我開始更一致地解決算法后不久,我發現有大量的資源可供實踐,學習解決這些問題的最有效策略,并為面試做好心理準備。(比如牛客網,力扣,領扣等)

除了練習面試問題外,這些網站通常按公司分組算法,嵌入活躍的博客,讓人們分享他們面試經驗的詳細總結,有時甚至提供模擬面試問題作為高級計劃的一部分。

如果你一開始真的很難解決問題,千萬不要失望,這是完全正常的。即使是非常有經驗的Python程序員也會發現,在沒有足夠培訓的情況下,許多算法很難在短時間內解決。

也不要失望,如果你的面試不像你預期的那樣,你剛剛開始解決算法。有些人每天都會準備好幾個月解決一些問題,并定期排練,然后才能敲定面試。

為了幫助您在培訓過程中,下面我選擇了10種算法(主要圍繞字符串操作和數組),這些算法在電話編碼面試中一再出現。這些問題的程度主要是相對簡單的,但是很容易遇到的,所以請把它們作為一個好的起點。

字符串操作

數字顛倒

  1. # 給定一個整數,返回顛倒之后的數字 
  2. # 數字可能是負數也可能是整數 
  3.  
  4. def solution(x): 
  5.     string = str(x) 
  6.      
  7.     if string[0] == '-'
  8.         return int('-'+string[:0:-1]) 
  9.     else
  10.         return int(string[::-1]) 
  11.      
  12. print(solution(-289)) 
  13. print(solution(123)) 
  14.  
  15. Output
  16. -132 
  17. 543 

平均單詞長度

  1. # 對于給定的句子,返回平均單詞長度。 
  2. # 請記住首先刪除標點符號。 
  3.  
  4. sentence1 = "Hi all, my name is Tom...I am originally from Australia." 
  5. sentence2 = "I need to work very hard to learn more about algorithms in Python!" 
  6.  
  7. def solution(sentence): 
  8.     for p in "!?',;."
  9.         sentence = sentence.replace(p, ''
  10.     words = sentence.split() 
  11.     return round(sum(len(word) for word in words)/len(words),2) 
  12.      
  13. print(solution(sentence1)) 
  14. print(solution(sentence2)) 
  15.  
  16. Output
  17. 4.2 
  18. 4.08 

要求您使用字符串應用一些簡單計算的算法非常普遍,因此熟悉諸如.replace()和.split()之類的方法非常重要,在這種情況下,這些方法有助于我刪除不需要的字符并創建單詞列表,其長度很容易測量和求和。

添加字符串

  1. # 給定兩個表示為字符串的非負整數num1和num2,返回num1和num2之和。 
  2. # 您不得使用任何內置的BigInteger庫或將輸入直接轉換為整數。 
  3.  
  4.  
  5.  
  6. num1 = '364' 
  7. num2 = '1836' 
  8.  
  9. # Approach 1:  
  10. def solution(num1,num2): 
  11.     eval(num1) + eval(num2) 
  12.     return str(eval(num1) + eval(num2)) 
  13.              
  14. print(solution(num1,num2)) 
  15.  
  16. #Approach2  
  17. # 給出一個長度為1的字符串,當參數是unicode對象時,ord()函數返回一個表示字符 
  18. # 的Unicode代碼點的整數,或者當參數是8位字符串時,返回字節的值。 
  19.  
  20. def solution(num1, num2): 
  21.     n1, n2 = 0, 0 
  22.     m1, m2 = 10**(len(num1)-1), 10**(len(num2)-1) 
  23.  
  24.     for i in num1: 
  25.         n1 += (ord(i) - ord("0")) * m1  
  26.         m1 = m1//10         
  27.  
  28.     for i in num2: 
  29.         n2 += (ord(i) - ord("0")) * m2 
  30.         m2 = m2//10 
  31.  
  32.     return str(n1 + n2) 
  33. print(solution(num1, num2)) 
  34.  
  35. Output
  36. 2200 
  37. 2200 

我發現兩種方法都同樣出色:第一種方法簡潔明了,使用直覺式eval()方法動態評估基于字符串的輸入,第二種方法巧妙地使用ord()函數來重新構建兩種方法字符串作為實際數字通過其字符的Unicode代碼點。如果確實要在兩者之間進行選擇,則我可能會選擇第二種方法,因為它一開始看起來比較復雜,但在解決需要更高級的字符串操作算法時通常很方便。

找到第一個唯一的字符

  1. #給定一個字符串,找到其中的第一個非重復字符并返回其索引。 
  2. #如果不存在,則返回-1。#注意:所有輸入字符串均已小寫。 
  3. #Approach 1 
  4. def solution(s): 
  5.     frequency = {} 
  6.     for i in s: 
  7.         if i not in frequency: 
  8.             frequency[i] = 1 
  9.         else
  10.             frequency[i] +=1 
  11.     for i in range(len(s)): 
  12.         if frequency[s[i]] == 1: 
  13.             return i 
  14.     return -1 
  15.  
  16. print(solution('alphabet')) 
  17. print(solution('barbados')) 
  18. print(solution('crunchy')) 
  19.  
  20. print('---'
  21.  
  22. #Approach 2 
  23. import collections 
  24.  
  25. def solution(s): 
  26.     # build hash map : character and how often it appears 
  27.     count = collections.Counter(s) # <-- gives back a dictionary with words occurrence count  
  28.                                          #Counter({'l': 1, 'e': 3, 't': 1, 'c': 1, 'o': 1, 'd': 1}) 
  29.     # find the index 
  30.     for idx, ch in enumerate(s): 
  31.         if count[ch] == 1: 
  32.             return idx      
  33.     return -1 
  34.  
  35. print(solution('alphabet')) 
  36. print(solution('barbados')) 
  37. print(solution('crunchy')) 
  38.  
  39. Output
  40. --- 

同樣在這種情況下,提供了兩種可能的解決方案,我想如果您對算法還不熟悉,第一種方法看起來會更加熟悉,因為它是從空字典開始的簡單計數器。

但是,從長遠來看,理解第二種方法將對您有更多幫助,這是因為在此算法中,我僅使用collection.Counter而不是自己構建chars計數器,而是用enumerate代替了range(len(s)) ,可以幫助您更優雅地識別索引的功能。

有效回文

  1. # 給定一個非空字符串s,您最多可以刪除一個字符。判斷是否可以使它回文。 
  2. # 字符串僅包含小寫字母az。 
  3. s = 'sadkas' 
  4. def solution(s): 
  5.     for i in range(len(s)): 
  6.         t = s[:i] + s[i+1:] 
  7.         if t == t[::-1]: return True 
  8.  
  9.     return s == s[::-1] 
  10.    
  11. solution(s) 
  12.  
  13. Output
  14. True 

“有效回文”問題是一個真正的經典,您可能會在許多不同的情況下反復發現它。在這種情況下,任務是通過刪除最多一個字符來檢查天氣,該字符與其相反的字符匹配。當s ='sadkas'時,該函數通過排除'k'來返回True,我們得到的單詞“ sadas”是回文。

數組

單調數組

  1. # 給定一個整數數組,請確定該數組是否為單調。 
  2. A = [6, 5, 4, 4]  
  3. B = [1,1,1,3,3,4,3,2,4,2] 
  4. C = [1,1,2,3,7] 
  5.  
  6. def solution(nums):  
  7.     return (all(nums[i] <= nums[i + 1] for i in range(len(nums) - 1)) or  
  8.             all(nums[i] >= nums[i + 1] for i in range(len(nums) - 1)))  
  9.    
  10. print(solution(A))  
  11. print(solution(B))  
  12. print(solution(C))  
  13.  
  14. Output
  15. True 
  16. False 
  17. True 

這是另一個非常常見的問題,并且上面提供的解決方案非常優雅,因為它可以單行編寫。當且僅當數組是單調遞增或單調遞減且為評估數組時,該數組才是單調的。上述算法利用all()函數的作用,如果iterable中的所有項目均為True,則返回True,否則返回False。如果可迭代對象為空,則all()函數還返回True。

移動零

  1. # 給出一個數組num,編寫一個函數以將所有零移動到其末尾,同時保持 
  2. # non-zero元素的相對順序。 
  3. array1 = [0,1,0,3,12] 
  4. array2 = [1,7,0,0,8,0,10,12,0,4] 
  5.  
  6. def solution(nums): 
  7.     for i in nums: 
  8.         if 0 in nums: 
  9.             nums.remove(0) 
  10.             nums.append(0) 
  11.     return nums 
  12.  
  13. solution(array1) 
  14. solution(array2) 
  15.  
  16. Output
  17. [1, 3, 12, 0, 0] 
  18. [1, 7, 8, 10, 12, 4, 0, 0, 0, 0] 

當您使用數組時,.remove()和.append()方法是寶貴的盟友。在此問題中,我使用它們首先刪除屬于原始數組的每個零,然后將其附加到同一數組的末尾。

填空白

  1. # 給定一個包含None值的數組,用該數組中的最新non None值填充None值 
  2. array1 = [1,None,2,3,None,None,5,None] 
  3.  
  4. def solution(array): 
  5.     valid = 0             
  6.     res = []                  
  7.     for i in nums:  
  8.         if i is not None:     
  9.             res.append(i) 
  10.             valid = i 
  11.         else
  12.             res.append(valid) 
  13.     return res 
  14.  
  15. solution(array1)  
  16.  
  17. Output
  18. [1, 1, 2, 3, 3, 3, 5, 5] 

兩次解決方案都必須包含邊緣案例(為簡單起見,在此省略)。從表面上看,這是一種易于構建的算法,但是您需要牢記要使用for循環和if語句要實現的目標,并應習慣使用None值。

匹配詞和不匹配詞

  1. # 給出兩個句子,返回一個數組,該數組的單詞出現在一個句子中,而不是 
  2. # 另一個單詞;返回一個數組,這些單詞具有共同的單詞。 
  3. sentence1 = 'We are really pleased to meet you in our city' 
  4. sentence2 = 'The city was hit by a really heavy storm' 
  5.  
  6. def solution(sentence1, sentence2): 
  7.     set1 = set(sentence1.split()) 
  8.     set2 = set(sentence2.split()) 
  9.      
  10.     return sorted(list(set1^set2)), sorted(list(set1&set2))  
  11.  
  12. print(solution(sentence1, sentence2)) 
  13.  
  14. Output
  15. (['The','We','a','are','by','heavy','hit','in','meet','our'
  16.     'pleased','storm','to','was','you'], 
  17.  ['city''really']) 

這個問題很直觀,但是算法利用了一些非常常見的集合操作,例如set(),intersection()或&和symmetric_difference()或^,它們對于使您的解決方案更加優雅非常有用。

質數數組

  1. # 給定k個小于n的數字,返回其中的素數集 
  2. # 注意:任務是編寫一個程序來打印一個間隔中的所有素數。 
  3. # 定義:質數是大于1的自然數,除1及其本身外,沒有除數。 
  4.  
  5. n = 35 
  6. def solution(n): 
  7.     prime_nums = [] 
  8.     for num in range(n): 
  9.         if num > 1: # all prime numbers are greater than 1 
  10.             for i in range(2, num): 
  11.                 if (num % i) == 0: # if the modulus == 0 is means that the number can be divided by a number preceding it 
  12.                     break 
  13.             else
  14.                 prime_nums.append(num) 
  15.     return prime_nums 
  16. solution(n) 
  17.  
  18. Output
  19. [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31] 

我想用另一個經典問題來結束本篇文章。如果您既熟悉質數定義又知道模數運算,那么可以很容易地找到一個解決方案,即通過谷值范圍(n)(modulus operation)。

結論

在本文中,我分享了10種Python算法的解決方案,這些解決方案是面試時經常遇到的問題。如果您正在準備與知名技術公司的面試,那么本文是您熟悉常見算法模式然后轉向更復雜問題的一個很好的起點。還要注意,本文中介紹的練習(及其解決方案)是對力扣和領扣上存在的問題的部分重新解釋。我遠不是該領域的專家,因此我提供的解決方案僅是指示性的解決方案。

責任編輯:未麗燕 來源: 今日頭條
相關推薦

2013-11-28 09:55:22

算法面試

2011-12-05 10:38:37

Java面試

2018-03-08 19:30:04

Python面試題

2017-08-17 09:07:45

Python編程代碼

2017-08-29 11:05:00

Python編程錯誤

2021-08-25 09:59:00

開發排序代碼

2020-07-22 07:43:11

Python開發工具

2011-03-04 11:00:22

數據庫優化

2013-01-28 09:51:02

2010-10-29 10:57:35

面試

2021-10-26 00:23:26

算法高頻元素

2020-08-19 09:22:14

Python語言工具

2020-12-31 10:33:05

Python開發編程

2013-04-25 09:14:37

免費學習編程工具

2010-03-17 13:46:55

Python sock

2021-01-12 22:33:57

程序員開發編程

2019-11-25 14:24:24

機器學習算法數據

2012-06-19 10:56:21

2012-07-02 14:12:50

2019-02-18 13:36:03

Redis數據庫面試
點贊
收藏

51CTO技術棧公眾號

精品无人区乱码1区2区3区在线| 久久电影网站中文字幕| 911国产精品| 亚洲综合欧美激情| 免费在线欧美视频| 91在线视频九色| 精品精品视频| 岛国av一区二区| 午夜宅男在线视频| 日本不卡一区二区三区高清视频| 人妖精品videosex性欧美| av在线中出| 欧美一区二区三区播放老司机| 四虎4hutv紧急入口| 岛国一区二区在线观看| 欧美一区1区三区3区公司| 国产一区福利| 欧美黑人性视频| 伊人精品影院| 欧美三级在线播放| 国产香蕉视频在线观看| 亚洲精品欧美综合四区| 免费成人进口网站| 美女视频网站黄色亚洲| 国产精品我不卡| 奶水喷射视频一区| 日韩久久久久久久| 国产毛片精品一区| 99久久国产宗和精品1上映| 波多野结衣中文一区| 韩国成人av| 久久成人精品无人区| 成人羞羞视频免费| 日韩精品免费观看视频| 亚洲男人天天操| 日韩区欧美区| 99在线观看视频| 丝袜美腿亚洲一区| 97av中文字幕| 亚洲免费在线看| 成人免费视频| 一本色道久久综合亚洲精品小说| 北岛玲一区二区三区| 日韩午夜在线观看视频| 三区在线观看| 日韩一区二区三区视频在线 | 亚洲精品在线电影| 91豆花视频在线播放| 伊人av综合网| 欧美军人男男激情gay| 成人国产在线激情| 日韩一级大片| 韩国日本在线视频| 亚洲欧洲成人自拍| 麻豆传媒在线完整视频| 亚洲毛片一区二区| 丁香花在线观看完整版电影| 一区二区三区鲁丝不卡| 免费高清一区二区三区| 在线看片成人| 97激碰免费视频| 国产精品久久久毛片| 亚洲精品中文字幕乱码| 国产尤物91| 六月婷婷色综合| 最新91在线| www高清在线视频日韩欧美| 9l视频自拍九色9l视频成人| 久久99精品久久久久子伦| 91视频com| eeuss鲁一区二区三区| 久久亚洲精品一区二区| 亚洲xxx拳头交| 成人免费淫片在线费观看| 欧美主播一区二区三区| 国产伦一区二区三区| 超碰10000| 色综合久久综合| 国产精品片aa在线观看| 美女扒开大腿让男人桶| 欧美精品亚洲一区二区在线播放| 精品国产一区二区三区| 男人添女荫道口图片| 日韩激情视频在线播放| 日韩av中文在线观看| 日本中文在线观看| 久久91精品国产91久久久| 韩国av一区| 亚洲欧洲成人| 在线免费亚洲电影| 亚洲老女人av| 亚洲视频一区在线| 一级片在线视频| 日韩欧美在线视频免费观看| 欧美艹逼视频| 欧洲av在线精品| 国产社区精品视频| 亚洲va久久久噜噜噜| 日韩电影在线一区二区三区| 国产精品视频入口| 久久99精品久久久久久久久久久久| av资源在线观看免费高清| 成人午夜在线视频一区| 日韩.com| h片在线播放| 日韩久久在线| 91麻豆精品91久久久久同性| 亚洲黄网站黄| 91免费看国产| 一区二区在线观看视频在线观看| 欧美人妖视频| 日本五级黄色片| 久久91精品国产| 欧美性猛交xxx| 国产精品乱看| 久久91视频| 欧美精品少妇| 亚洲一区二区三区免费观看| 午夜精品久久久久久久男人的天堂| 成人免费福利片| 日韩在线理论| 欧美啪啪网站| aaaaa毛片| 欧美精品国产精品久久久| 深夜福利日韩在线看| 欧美日韩国产中字| 91麻豆国产自产在线观看| 97精品在线| 日韩av影片| 免费国产视频| 狠狠干视频网站| av噜噜色噜噜久久| 136fldh精品导航福利| 日韩精品视频中文在线观看| 亚洲午夜视频在线| 国产91对白在线观看九色| 国产毛片久久| 久久国产日韩欧美精品| 91免费网站视频| 亚洲精品在线三区| 成人听书哪个软件好| 99久久精品免费看国产小宝寻花 | 奇米777欧美一区二区| 伊人中文字幕在线| 国产精品免费一区二区三区| 欧美第一区第二区| 亚洲欧美综合色| 国产午夜亚洲精品理论片色戒 | 神马久久一区二区三区| 精品亚洲二区| 草草视频在线一区二区| 亚洲色图美女| 综合av在线| 不卡一区在线观看| 国产精品污网站| 亚洲欧美日本日韩| 99re久久| 男女污视频在线观看| 黄色动漫在线免费看| 91成人国产在线观看| 欧美精品aⅴ在线视频| 国产精品看片你懂得| 久久久久久亚洲综合影院红桃| 精品视频亚洲| 国产精品亚洲成在人线| 国产免费观看高清视频| 91美女片黄在线观看游戏| 亚洲国产精品va| 亚洲欧美激情视频在线观看一区二区三区| 日本成人精品| 干日本少妇首页| 日本中文字幕久久看| 欧美激情一区不卡| 2020国产精品久久精品美国| 亚洲激情中文1区| 亚洲一区在线看| 婷婷中文字幕综合| 中文字幕久热精品在线视频| 亚洲激情电影中文字幕| 久久久久久久久综合| 欧美高清视频在线| 国自产精品手机在线观看视频| 欧美精品一区二区三区很污很色的 | 久久午夜老司机| 99精品国产一区二区三区不卡| 欧美日韩一区二区三区免费看 | 久久大胆人体| 婷婷精品在线观看| 精品制服美女久久| 26uuu精品一区二区三区四区在线| 图片区小说区区亚洲影院| 欧美人交a欧美精品| 欧美xxxx吸乳| 欧美日韩经典丝袜| 欧美色图五月天| 99精品一区二区| 日韩精品电影网| 亚洲一区二区三区免费观看| 国产视频1区2区3区| 一区二区三区四区视频免费观看|