python算法问题?

看书,看视频都可以帮助你学习代码,但都只是辅助作用,学好 Python,最重要的还是 多敲代码,多刷题

不知道怎么找题刷题的小伙伴,可以看看我们今天带来的。覆盖了基本语法,数据结构,算法等多个方面,并附有答案。

一、确定字符串是否包含唯一字符

实现一个算法:识别一个字符串中,是否包含唯一的字符。

  • 如果字符串中的字符都是唯一的,则返回 True,如 '123'。
  • 如果字符串中的字符有重复,则返回 False,如 '1223'。

考核点:集合的用法:set()

看到这个题目,你的第一反应可能是:先把字符串中每个字符都拆分出来,放入一个列表,再统计列表中是否有数量为 1 的字符。但这么做不但费时,而且要循环多次,效率极低,有一个方法可以让你超过 99 % 的面试者:

记得 Python 的 Set (集合) 概念吗?在集合中,所有的元素都是唯一的。你可以使用 set() 方法将字符串、列表等任何「可迭代对象」转换为集合,转换后会删除重复的元素,继而长度会发生变化。

所以,我们只需要将字符串转换为集合,然后比较转换前后的长度即可,代码如下。

二、确定字符串是否是另一个的排列

实现一个算法来识别一个字符串 str2 是否是另一个字符串 str1 的排列。排列的解释如下:

  • 如果将 str1 的字符拆分开,重新排列后再拼接起来,能够得到 str2 ,那么就说字符串 str2 是字符串 str1 的排列。例如:123 是 321 的排列,abc 是 cba 的排列。

一样是看起来复杂,但只需一行核心代码就能搞定的题目。在其他语言中,你可能要手动写一个排序算法,然后比较两个字符串排序后是否一样。但 Python 自带的 sorted() 方法,可以自动对所有可迭代的对象进行排序操作。

三、反转字符串中的字符

实现一个算法来实现反转字符数组的功能。反转的要求如下:

  • 将字符数组替换为反转后的数组。

常规的解法是创建一个相同长度的新数组,然后把第一个数组中的元素,按倒序放入新数组中。但更简单的方法是:利用 Python 交换变量的特性,不需要新建数组,直接在原数组里即可完成,代码如下。

给定一个整数 num,从 1 到 num 按照下面的规则返回每个数:

  • 如果这个数被 3 整除,返回 'Fizz'。
  • 如果这个数被 5 整除,返回 'Buzz'。
  • 如果这个数既不能被 3 也不能被 5 整除,返回这个数字的字符串格式。

考核点:Python 基础语法中的条件判断

有趣又比较简单的一道题,写一个循环即可。当数字被 3 整除时返回 'Fizz',被 5 整除,返回 'Buzz',同时被 3 和 5 整除,返回 'FizzBuzz'……代码如下。

更多题目,欢迎进入课程学习~新用户可以免费学习前 20 道题目!

其实如虎添翼的往往是那些个内置库以及动态特性。

没啥好说的,以前好玩的时候撸了两百来题,对比用cpp的代码,大都短很多。很多用生成器的实现会比较有意思,此外也可以琢磨琢磨怎么写得更pythonic,同时更高效。

考虑到leetcode的题目难度偏低,反倒突出了语言优势。真说起来,算法竞赛之类的话难度其实并不在于几个语法糖或者动态特性。但是若就面试题而言,Python功底如何,完全可以从这样的题目的实现代码里看出来。

这种类型的基本写过一定时间python的人都能想得出来,因为会用到一些python特有的性质,主要也是针对相对简单的问题,写出来不会给人一种装逼的感觉,比如下面几种。

此类型需要熟练使用python一些库,写出来后有一定的pythonic逼格,但是解答的问题也通常较简单。

这种就像题注说的,牺牲了一定的时间空间复杂度,经常会把字符串cast成整数或者整数cast成字符串,但是硬是达到了pythonic的效果。

大家都看得懂,没有过多调用python的包包,逻辑也和在别的语言一样,但在python就是能一行完成。

之前网上看到的,非leetcode,把python特性运用到了极致写出高校代码。

面试中个人觉得2和4都是能接受的,如果面试官不了解python的话可以解释下syntax就好了。5和6就真的是大神了,复杂度神么的都是浮云。1和3这种捷径在面试中一般人不大能接受。

我要回帖

更多关于 python算法是什么意思 的文章

 

随机推荐