为什么练习算法是关键? 如果你是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) # 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上存在的问题稍微做了重新解释。在这个领域我还远非达得到一个专家的水平,因此我呈现的解决方法仅仅是指示性的。
原文标题:在python编程面试前需要学会的10个算法
文章出处:【微信公众号:数据分析与开发】欢迎添加关注!文章转载请注明出处。
通过工业物联网网关实现远程控制PLC设备的策略
什么是超声波传感器?超声波传感器优劣势
苹果继AiP延续自研后 可能在跟进射频前端模组(RF FEM)自主开发
拆机魔王:四款新智能手机内部结构曝光!
对防爆对讲机的行业应用分类
Python新手们,快把算法练起来
5G在垂直行业落地的五大挑战
魅族5S发布,支持快充技术,售价仅999!
视觉检测在紧固件行业中的应用
艾睿光电红外热成像解决方案亮相2023北京安博会
高速AVR实现振动/温度信号采集和存储
集思宝测量型GNSS接收机-G970C
连接未来:构建准确可靠的工厂预测性维护系统
怎么区分火花塞种类_火花塞种类有什么不同
FPGA算法技术相关问题整理
UML图学习笔记
RT-Thread使用Soft RTC(软件模拟RTC)
看各路大咖畅谈自己眼中的人工智能
!!卖/买/修 HP8922M +HP83220E HP89
TISC—系统多学科协同仿真平台