色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Python新手們,快把算法練起來

數據分析與開發 ? 來源:數據分析與開發 ? 作者:數據分析與開發 ? 2020-09-24 16:10 ? 次閱讀

為什么練習算法是關鍵? 如果你是Python新手,并且打算面試頂尖公司(FAANG),聽著,你需要從現在開始就好好練習算法。 不要像我第一次練習算法時那么天真。盡管我認為從早到晚死磕算法很有趣,但是我從來沒有花過太多時間練習,甚至更少花時間去使用快捷、高效的解決方法。在我看來,我認為花一天的時間解決算法問題有點太傻了,而且在實際工作環境中很不適用,而且長期來看這也不會給我帶來多大的收益。 “知道如何解決算法問題將會成為你在找工作過程中極有競爭力的優勢” 好吧……我錯了(至少在某種程度上來說):我仍然認為花費太多時間在算法上而不注重其他技能遠遠不能讓你找到理想的工作,但是我知道作為一個程序員,復雜的問題總會自己出現在日常的工作當中,因此大公司不得不找到一個標準化的流程來收集應聘者在問題解決和細節技能關注的見解。這意味著知道如何解決算法問題將會成為在找工作的你的一個競爭優勢,甚至不那么出名的公司也傾向于采納這樣的評估方法。 那里有一整個世界 在我開始更專注地解決算法問題之后不久,我發現有很多資源可供練習、學習最有效的策略以及為面試做好充足的心理準備,比如以下幾個例子:

HackerRank:

https://www.hackerrank.com/interview/interview-preparation-kit

LeetCode:

https://leetcode.com/explore/interview/card/top-interview-questions-easy/

CodingBat :

https://codingbat.com/python

GeeksForGeeks:

https://www.geeksforgeeks.org/python-programming-language/?ref=leftbar

練習頂級的面試問題,這些網站通常會按照公司對算法問題進行分組,并且把人們分享詳細的面試經驗總結的活躍博客嵌入進去,有時也會提供模擬面試問題作為優選計劃(premium plans)的一部分。 例如,LeetCode可以通過特定的公司以及頻率篩選頂尖的面試問題。你也可以選擇自己覺得合適的試題難度(簡單、中等、困難):

來源:https://leetcode.com/problemset/all/ 那里有上百道不同的算法問題,這意味著,要做到能夠識別出常見的模式并在10分鐘以內得出有效的解決方法需要大量的時間和投入。 “如果你一開始感覺到解決這些算法問題很困難千萬不要灰心喪氣,這是很正常的事。” 如果你一開始感覺到解決這些算法問題很困難千萬不要灰心喪氣,這是很正常的事。即使有經驗的Python程序員在沒有充分的訓練之前,也會感覺到有很多算法題很難解。 如果你的面試不如預期并且你才剛開始刷題,也不要沮喪。有很多人會刷好幾個月的算法題,并且做有規律地復習才能最終拿下一場面試。 為了在你的練習過程中幫到你,我精選了10個在電話面試過程中反復出現的算法(主要是關于字符串操作和數組)。這些問題的難度大都比較容易,所以這會是一個很好的開始。 請注意我給出的每個問題的解答僅僅是許多潛在解決方法的其中之一,通常是一個蠻力解法(“Brute Force”)。因此請自主選擇你自己的解法,嘗試在運行時間和所用內存之間找到適當的平衡。

字符串處理

1. 整數逆位輸出

# Given an integer, return the integer with reversed digits.# Note: The integer could be either positive or negative. def solution(x): string = str(x) if string[0] == '-': return int('-'+string[:0:-1]) else: return int(string[::-1]) print(solution(-231))print(solution(345))Output:-132 543

這是一個預熱算法,將幫助您練習切片技巧。實際上,唯一棘手的問題是確保您考慮整數為負數的情況。我已經看到此問題以許多不同的方式呈現,但這通常有更復雜的要求。

2. 平均單詞長度

# For a given sentence, return the average word length. # Note: Remember to remove punctuation first. sentence1 = "Hi all, my name is Tom...I am originally from Australia."sentence2 = "I need to work very hard to learn more about algorithms in Python!" def solution(sentence): for p in "!?',;.": sentence = sentence.replace(p, '') words = sentence.split() return round(sum(len(word) for word in words)/len(words),2) print(solution(sentence1))print(solution(sentence2))Output:4.2 4.08

要求使用字符串來進行一些簡單計算的算法非常常見,因此你需要對.replace()和.split()這些方法非常熟悉,這樣才能幫助你刪除不想要的字符并且創建單詞長度容易計算和求和的單詞表。

3. 添加字符串

# Given two non-negative integers num1 and num2 represented as string, return the sum of num1 and num2.# You must not use any built-in BigInteger library or convert the inputs to integer directly. #Notes:#Both num1 and num2 contains only digits 0-9.#Both num1 and num2 does not contain any leading zero. num1 = '364'num2 = '1836' # Approach 1: def solution(num1,num2): eval(num1) + eval(num2) return str(eval(num1) + eval(num2)) print(solution(num1,num2)) #Approach2 #Given a string of length one, the ord() function returns an integer representing the Unicode code point of the character #when the argument is a unicode object, or the value of the byte when the argument is an 8-bit string. def solution(num1, num2): n1, n2 = 0, 0 m1, m2 = 10**(len(num1)-1), 10**(len(num2)-1) for i in num1: n1 += (ord(i) - ord("0")) * m1 m1 = m1//10 for i in num2: n2 += (ord(i) - ord("0")) * m2 m2 = m2//10 return str(n1 + n2)print(solution(num1, num2))Output:2200 2200 我發現兩種方法同樣好用:第一種勝在簡潔和直觀地使用eval()方法對基于字符串的輸入進行動態評估,而第二種勝在ord()功能的巧妙使用,來通過其字符的Unicode編碼將兩個字符串重構成實際的數字。如果你真的要選擇其中的一種,我傾向于選擇第二種,因為它第一眼看上去更復雜,但是通常在解決需要更高級的字符串處理和計算的“中等”和“困難”算法問題當中非常好用。 4. 第一個不同的字母

# Given a string, find the first non-repeating character in it and return its index. # If it doesn't exist, return -1. # Note: all the input strings are already lowercase. #Approach 1def solution(s): frequency = {} for i in s: if i not in frequency: frequency[i] = 1 else: frequency[i] +=1 for i in range(len(s)): if frequency[s[i]] == 1: return i return -1 print(solution('alphabet'))print(solution('barbados'))print(solution('crunchy')) print('###') #Approach 2import collections def solution(s): # build hash map : character and how often it appears count = collections.Counter(s) # <-- gives back a dictionary with words occurrence count #Counter({'l': 1, 'e': 3, 't': 1, 'c': 1, 'o': 1, 'd': 1}) # find the index for idx, ch in enumerate(s): if count[ch] == 1: return idx return -1 print(solution('alphabet'))print(solution('barbados'))print(solution('crunchy'))

Output:1 2 1 ### 1 2 1 在這種情況下,也是有兩種潛在的解決方法,我猜測如果你是算法小白,第一種看起來更熟悉,因為它是從空字典開始構建的簡單計數器。 然而理解第二種方法將會從長期來看幫助你更多,這是因為在這個算法當中我簡單地使用了collection.Counter(s)代替創建字符計數器,并且用enumerate(s)代替了range(len(s)),enumerate(s)是一個可以幫助你更好地識別索引地址的函數。 5. 有效回文

# Given a non-empty string s, you may delete at most one character. Judge whether you can make it a palindrome.# The string will only contain lowercase characters a-z. s = 'radkar'def solution(s): for i in range(len(s)): t = s[:i] + s[i+1:] if t == t[::-1]: return True return s == s[::-1] solution(s) Output: True “回文數列”問題是一個經典問題,你可能會在很多不同場景都見到它。任務是檢查通過移除最多一個字符之后,字符串是否與它的逆向字符串相匹配。當s=’radkar’時,函數返回True,因為除去’k’之后,我們獲得單詞’radar’是一個回文序列。 數組6. 單調數組

# Given an array of integers, determine whether the array is monotonic or not.A = [6, 5, 4, 4] B = [1,1,1,3,3,4,3,2,4,2]C = [1,1,2,3,7] def solution(nums): return (all(nums[i] <= nums[i + 1] for i in range(len(nums) - 1)) or all(nums[i] >= nums[i + 1] for i in range(len(nums) - 1))) print(solution(A)) print(solution(B)) print(solution(C))Output:True False True 這是另外一個常見的問題,以上提供的解決方法也是非常漂亮的,因為可以用一行解決。當且僅當某一數組單調遞增或單調遞減時才被稱為單調數組,為了評估它,以上算法利用了all()函數,當所有可迭代項為真,則返回True,否則返回FALSE。如果迭代對象是空,all()函數也會返回True。 7. 移動零

#Given an array nums, write a function to move all zeroes to the end of it while maintaining the relative order of #the non-zero elements. array1 = [0,1,0,3,12]array2 = [1,7,0,0,8,0,10,12,0,4] def solution(nums): for i in nums: if 0 in nums: nums.remove(0) nums.append(0) return nums solution(array1)solution(array2)

Output:[1, 3, 12, 0, 0] [1, 7, 8, 10, 12, 4, 0, 0, 0, 0] 當你在處理數組的時候,.remove()和.append()的方法是“黃金組合”。在這個問題當中,我用他們首先將屬于原始數組的零移除,然后把移出的零填到同一個數組的末尾。 8. 填空

# Given an array containing None values fill in the None values with most recent # non None value in the array array1 = [1,None,2,3,None,None,5,None] def solution(array): valid = 0 res = [] for i in nums: if i is not None: res.append(i) valid = i else: res.append(valid) return res solution(array1)Output:[1, 1, 2, 3, 3, 3, 5, 5] 在真實面試過程中,我有兩次都被問到這個問題。這兩次都需要包括邊界情況(我在這里為了簡化省略了)。在論文當中,這是一個易于創建的算法,但是你需要在腦海中有一個清晰的概念,你到底希望通過這個for循環和if語句實現什么,并且可以輕松地使用None值。 9. 匹配和失匹配單詞

#Given two sentences, return an array that has the words that appear in one sentence and not#the other and an array with the words in common. sentence1 = 'We are really pleased to meet you in our city'sentence2 = 'The city was hit by a really heavy storm' def solution(sentence1, sentence2): set1 = set(sentence1.split()) set2 = set(sentence2.split()) return sorted(list(set1^set2)), sorted(list(set1&set2)) # ^ A.symmetric_difference(B), & A.intersection(B) print(solution(sentence1, sentence2))Output:(['The','We','a','are','by','heavy','hit','in','meet','our','pleased','storm','to','was','you'],['city', 'really']) 這個問題非常直觀,但是該算法利用了一些非常常見的set操作,例如set(), intersection() or &以及symmetric_difference() or ^這些方法都會讓你的解題過程更漂亮。如果你是第一次見到它們,請查看一下這個網址:https://www.programiz.com/python-programming/set 10. 質數數據

# Given k numbers which are less than n, return the set of prime number among them# Note: The task is to write a program to print all Prime numbers in an Interval.# Definition: A prime number is a natural number greater than 1 that has no positive divisors other than 1 and itself. n = 35def solution(n): prime_nums = [] for num in range(n): if num > 1: # all prime numbers are greater than 1 for i in range(2, num): if (num % i) == 0: # if the modulus == 0 is means that the number can be divided by a number preceding it break else: prime_nums.append(num) return prime_numssolution(n)Output:[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31] 我想用另外一個經典問題來結束這一部分。如果你熟悉質數的定義和模運算,就可以輕而易舉地找到遍歷range(n)的解法。 結論 本文當中我分享了10個在編程面試當中常被問到的Python算法。如果你正在準備一家知名技術公司的面試,這篇文章對你熟悉常見算法模式并且循序漸進到更復雜問題來說,是一個好的開始。順便請注意本文當中的練習(及其解決方案)只是針對Leetcode和GeekforGeeks上存在的問題稍微做了重新解釋。在這個領域我還遠非達得到一個專家的水平,因此我呈現的解決方法僅僅是指示性的。

責任編輯:xj

原文標題:在Python編程面試前需要學會的10個算法

文章出處:【微信公眾號:數據分析與開發】歡迎添加關注!文章轉載請注明出處。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 編程
    +關注

    關注

    88

    文章

    3619

    瀏覽量

    93776
  • python
    +關注

    關注

    56

    文章

    4797

    瀏覽量

    84745

原文標題:在Python編程面試前需要學會的10個算法

文章出處:【微信號:DBDevs,微信公眾號:數據分析與開發】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    TimSort:一個在標準函數庫中廣泛使用的排序算法

    排序算法呢? 本文將帶你走進 TimSort,一個在標準函數庫中廣泛使用的排序算法。 這個算法由工程師 Tim Peters 于 2001 年專為 Python 設計,并自
    的頭像 發表于 01-03 11:42 ?57次閱讀

    Raspberry Pi樹莓派新手指南

    電子發燒友網站提供《Raspberry Pi樹莓派新手指南.pdf》資料免費下載
    發表于 12-23 17:05 ?0次下載

    一個月速成python+OpenCV圖像處理

    適用于哪些場景,然后通過Python編寫代碼來實現這些算法,并應用于實際項目中,實現圖像的檢測、識別、分類、定位、測量等目標。本文將介紹一個高效學習Python+O
    的頭像 發表于 11-29 18:27 ?144次閱讀
    一個月速成<b class='flag-5'>python</b>+OpenCV圖像處理

    APM32F411板的python+pyocd命令行操作

    前段時間學習了一下如何使用pyocd配合APM32F411VCTINY板在命令行下給它進行各種騷操作,在使用一段時間后就想著:pyocd是基于python的,那是不是也可以使用python腳本+pyocd使用起來呢?
    的頭像 發表于 10-18 16:21 ?315次閱讀
    APM32F411板的<b class='flag-5'>python</b>+pyocd命令行操作

    如何幫助孩子高效學習Python:開源硬件實踐是最優選擇

    家長常常擔心孩子在學習Python時所面臨的挑戰,如復雜性、興趣保持、學習進度和可用資源。對于希望有效教授孩子Python的家長而言,了解硬件的作用至關重要,因為結合硬件項目的Python
    的頭像 發表于 09-06 09:49 ?330次閱讀

    pytorch和python的關系是什么

    在當今的人工智能領域,Python已經成為了最受歡迎的編程語言之一。Python的易學易用、豐富的庫和框架以及強大的社區支持,使其成為了數據科學、機器學習和深度學習等領域的首選語言。而在深度學習領域
    的頭像 發表于 08-01 15:27 ?2004次閱讀

    Python建模算法與應用

    上成為理想的腳本語言,特別適用于快速的應用程序開發。本文將詳細介紹Python在建模算法中的應用,包括常見的建模算法Python在建模中的優勢、常用庫以及實際案例。
    的頭像 發表于 07-24 10:41 ?569次閱讀

    Python在AI中的應用實例

    Python在人工智能(AI)領域的應用極為廣泛且深入,從基礎的數據處理、模型訓練到高級的應用部署,Python都扮演著至關重要的角色。以下將詳細探討Python在AI中的幾個關鍵應用實例,包括機器學習、深度學習、自然語言處理、
    的頭像 發表于 07-19 17:16 ?1137次閱讀

    如何實現Python復制文件操作

    Python 中有許多“開蓋即食”的模塊(比如 os,subprocess 和 shutil)以支持文件 I/O 操作。在這篇文章中,你將會看到一些用 Python 實現文件復制的特殊方法。下面我們開始學習這九種不同的方法來實現 Pyt
    的頭像 發表于 07-18 14:53 ?427次閱讀

    opencv-python和opencv一樣嗎

    不一樣。OpenCV(Open Source Computer Vision Library)是一個開源的計算機視覺和機器學習軟件庫,它提供了大量的圖像和視頻處理功能。OpenCV-Python
    的頭像 發表于 07-16 10:38 ?1222次閱讀

    用pycharm進行python爬蟲的步驟

    以下是使用PyCharm進行Python爬蟲的步驟: 安裝PyCharm和Python 首先,您需要安裝PyCharm和Python。PyCharm是一個流行的Python集成開發環境
    的頭像 發表于 07-11 10:11 ?868次閱讀

    Python自動化測試框架及其應用

    Pytest是一個非常成熟的全功能的Python測試框架,與python自帶的unittest測試框架類似,但是比unittest框架使用起來更簡潔,功能更強大。
    的頭像 發表于 04-03 16:15 ?558次閱讀
    <b class='flag-5'>Python</b>自動化測試框架及其應用

    基于Python的地圖繪制教程

    本文將介紹通過Python繪制地形圖的方法,所需第三方Python相關模塊包括 rasterio、geopandas、cartopy 等,可通過 pip 等方式安裝。
    的頭像 發表于 02-26 09:53 ?1233次閱讀
    基于<b class='flag-5'>Python</b>的地圖繪制教程

    如何使用linux下gdb來調試python程序

    如何使用linux下gdb來調試python程序? 在Linux下,可以使用GDB(GNU調試器)來調試Python程序。GDB是一個強大的調試工具,可以幫助開發者診斷和修復程序中的錯誤。在本文
    的頭像 發表于 01-31 10:41 ?2650次閱讀

    如何使用Python進行圖像識別的自動學習自動訓練?

    如何使用Python進行圖像識別的自動學習自動訓練? 使用Python進行圖像識別的自動學習和自動訓練需要掌握一些重要的概念和技術。在本文中,我們將介紹如何使用Python中的一些常用庫和算法
    的頭像 發表于 01-12 16:06 ?602次閱讀
    主站蜘蛛池模板: 国产99视频精品免费播放| 免费韩国伦理2017最新| 日韩欧无码一区二区三区免费不卡| 99麻豆精品国产人妻无码| 日本xxx在线观看免费播放| 国产精品高清m3u8在线播放| 亚洲欧美成人综合| 免费果冻传媒2021在线观看| 国产69精品久久久久乱码| 亚洲欧美人成视频在线| 免费视频亚洲| 国产精品美女久久久久浪潮AV| 一本道亚洲区免费观看| 欧美高清69hd| 国产手机精品一区二区| 18禁国产精品久久久久久麻豆| 日韩一区二区三区射精| 九九99热久久精品在线6| 超碰v| 亚洲色噜噜狠狠网站| 暖暖视频中国在线观看免费韩国| 国产精品国产三级国AV在线观看 | p影院永久免费| 亚洲 欧美 中文字幕 在线| 两百磅美女| 国产视频精品在线偷拍| jizz中国女人| 一边捏奶头一边啪高潮会怎么样| 欧美精品九九99久久在免费线| 果冻传媒独家原创在线观看| va亚洲va天堂va视频在线| 一道本在线伊人蕉无码| 熟女人妻久久精品AV天堂| 男女性杂交内射妇女BBWXZ| 国色精品VA在线观看免费视频| 成人国产免费| 91素人约啪| 一区二区三区内射美女毛片| 四虎永久免费网址| 欧美日韩北条麻妃一区二区| 久久AV喷吹AV高潮欧美|