编程面试前需要解决的10个算法

在本文中,我提出并分享了 FAANG 访谈中经常出现的一些基本算法的解决方案为什么实践算法是关键?如果你是 Python 的新手,并且计划开始面试顶级公司(包括 FAANG) ,听听这个: 你现在就需要开始练习算法 。
不要像我刚开始解决这些问题时那样天真 。尽管我认为时不时破解几个算法很有趣,但我从来没有花太多时间练习,花更少的时间来实现一个更快或更高效的解决方案 。就我个人而言,我在想,在一天结束的时候,整天解决算法有点太书呆子气了,它在实际的日常工作环境中并没有真正的实际用途,而且从长远来看,它也不会给我带来多少收入 。
“知道如何解决算法将给你在求职过程中带来竞争优势”
好吧... 我错了(至少部分错了) : 我仍然认为,在算法上花费太多时间而不关注其他技能,并不足以让你找到理想的工作,但我明白,既然复杂的问题出现在日常工作中,作为一名程序员,大公司必须找到一个标准化的流程,以收集求职者解决问题的见解和对细节技能的关注 。这意味着,知道如何解决算法将使你在求职过程中具有竞争优势,因为即使不那么出名的公司也倾向于采用类似的评估方法 。
外面有一个完整的世界【编程面试前需要解决的10个算法】在我开始更加一致地解决算法后不久,我发现有大量的资源可以用来练习,学习最有效的策略来解决它们,并为面试做好心理准备(hackerank、 LeetCode、 CodingBat 和 GeeksForGeeks 只是其中的几个例子) 。
这些网站通常会按照公司对算法进行分组,在活跃的博客中分享他们面试经验的详细总结,有时甚至会提供模拟面试问题作为高级计划的一部分 。
例如,LeetCode 可以让你根据特定的公司和频率筛选出最重要的面试问题 。你也可以选择你感觉舒服的难度级别(简单、中等和难度) :

编程面试前需要解决的10个算法

文章插图
 
现在有成百上千种不同的算法问题,这意味着要在不到10分钟的时间内识别出通用模式并编写出一个有效的解决方案,需要花费大量的时间和精力 。
“如果一开始你真的很难解决这些问题,不要失望,这是完全正常的”
如果一开始你真的很难解决这些问题,不要失望,这是完全正常的 。即使是更有经验的 Python 程序员也会发现,如果没有足够的培训,许多算法在短时间内就难以解决 。
如果你的面试没有按照你预期的那样进行,而你刚刚开始解决算法问题,也不要失望 。有些人为每天解决一些问题准备了好几个月,并且在能够搞定面试之前定期进行排练 。
为了帮助您在您的培训过程中,下面我选择了10个算法(主要围绕字符串操作和数组) ,我已经看到一次又一次出现在电话编码采访 。这些问题的层次主要是容易的,所以把它们当作一个好的起点 。
请注意,我分享的每个问题的解决方案只是许多可以实现的潜在解决方案之一,通常是 BF (“蛮力”)解决方案 。因此,您可以自由地编写自己版本的算法,尝试在运行时和使用内存之间找到正确的平衡 。
操纵字符串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))
view rawreverse_int.py hosted with ? by GitHub
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))
view rawavg_words_length.py hosted with ? by GitHub
Output:
4.2
4.08
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))


推荐阅读