91高清免费观看_亚洲高清视频免费观看_91视频综合_国产精品一区99_伊人手机视频_懂色av懂色aⅴ精彩av

有趣生活

当前位置:首页>职场>python常见算法面试题(Python解答蚂蚁金服面试的算法题)

python常见算法面试题(Python解答蚂蚁金服面试的算法题)

发布时间:2024-01-24阅读(3)

导读前几天看了一个视频,讲的是蚂蚁金服面试的一道算法题,题目是统计给定列表中的逆序数。在打开思路之前,先介绍一下什么是逆序数。举个简单的例子,一个数组列表为:[....

python常见算法面试题(Python解答蚂蚁金服面试的算法题)(1)

前几天看了一个视频,讲的是蚂蚁金服面试的一道算法题,题目是统计给定列表中的逆序数。

在打开思路之前,先介绍一下什么是逆序数。举个简单的例子,一个数组列表为:[5,3,1,1],其中逆序数有(5,3)、(5,1)、(5,1)、(3,1)、(3,1)总计5个。

对逆序数有了了解后,想必有一点python基础的朋友肯定就会想到最简单的一个思路,也是比较暴力的思路。

思路一:遍历统计法。

即用for循环取值,然后一个一个比较大小,设置一个变量,累加起来即可。代码如下,只有几行:

#Written by magiczsd# coding=UTF-8import timeli = [23,1,11,11,1,2,5,1,22]k = 0 #设置一个变量kli_len = len(li)start = time.time()for i in li: #循环取列表里的数值和后面的数值比较大小 k = 1 for j in range(k,li_len): if i > li[j]: #如果为真,则变量加1 num =1print(num)end = time.time()print(end-start)

python常见算法面试题(Python解答蚂蚁金服面试的算法题)(2)

思路一比较简单,大家也比较容易理解,但是既然这是蚂蚁金服面试的算法题,考官必定想看到能让眼睛一亮的思路,于是小编思考了下,想到了第二个思路。

思路二:最大值统计法。

即先用max函数查找出列表里最大的数值max_value,再用index函数查找最大值在列表里的第一个索引值max_index,接着再用count函数计算出列表里有几个最大值max_counts,最后用len函数计算列表里元素的个数len_num。

将max_index 1便得到这个最大值在列表中是第几个元素(注意:这里需要从1开始计算),用len统计的len_num-(max_index 1)便得到最大值右边的元素个数,最后再减去剩余的最大值个数即max_counts-1,这样便可以得到以这个最大值组成的逆序数个数。

然后用remove函数将这个最大值从列表里剔除,继续重复上面的步骤即可,代码如下:

#Written by magiczsd# coding=UTF-8import timeli = [23,1,11,11,1,2,5,1,22]num = 0def NiXuShu(li): len_num = len(li) #列表的元素个数 max_value = max(li) #得到最大值 max_index = li.index(max_value) #得到最大值在列表里的第一个位置的索引值 max_counts = li.count(max_value) #统计列表里最大值的个数 num = len_num - (max_index 1) - (max_counts-1) return num,max_value #返回以这个最大值组成的逆序数的个数和最大值start = time.time()while len(li) != 0: #循环处理,直到列表里最后一个最大值被剔除后,循环结束 num = NiXuShu(li)[0] li.remove(NiXuShu(li)[1]) #剔除第一个最大值print(num)end = time.time()print(end-start)

python常见算法面试题(Python解答蚂蚁金服面试的算法题)(3)

当时写完这段代码的时候,小编忽然灵光一闪,既然有最大值统计法,是否也可以有最小值统计法?于是很快最小值统计法的思路便有了。

思路三:最小值统计法。

先用min函数查找出列表里的最小值min_value,再用index查找出最小值在列表里的第一个索引值min_index,而这个min_index数值就是这个最小值与它左边的数值组成的逆序数的个数。

比如列表[3,2,1,4],最小值为1,与1组成的逆序数只有(3,1)、(2,1)数量是2,而其索引值也是2。

有了这样的思路,接下来的统计方法就和思路三的类似了,代码如下:

#Written by magiczsd# coding=UTF-8import timeli = [23,1,11,11,1,2,5,1,22]num = 0def NiXuShu(li): min_value = min(li) #得到列表里的最小值 min_index = li.index(min_value) #最小值在列表的索引值 num = min_index #索引值即为最小值与左边的数值组成的逆序数个数 return num,min_valuestart = time.time()while len(li) != 0: #循环处理,直到列表里最后一个最小值被剔除后,循环结束 num = NiXuShu(li)[0] li.remove(NiXuShu(li)[1]) #剔除第一个最小值print(num)end = time.time()print(end-start)

python常见算法面试题(Python解答蚂蚁金服面试的算法题)(4)

上面的三种思路,第一种比较容易理解,第二种和第三种需要稍微思考下也是比较容易理解的。虽然这三种思路都可以解决问题,不过速度却不一样。在列表里的元素不多的时候,三种代码处理起来看不出差别,当元素达到上千上万甚至更多的时候,第一种处理起来会变得很慢,其次是第二种,速度最快的是第三种思路,有兴趣的朋友可以去测试一下。

代码如写的有所不足,希望大家指出,在python学习的路上一起进步!

代码已上传GitHub(https://github.com/magiczsd/office)

欢迎分享转载→http://www.umpkq.cn/read-230065.html

Copyright ? 2024 有趣生活 All Rights Reserve吉ICP备19000289号-5 TXT地图

主站蜘蛛池模板: 草综合 | a级毛片免费观看网站 | 国产福利免费视频 | 久久精品女人天堂av免费观看 | 久久福利电影网 | a级毛片高清免费视频就 | 免费精品一区二区三区第35 | 久久乐国产精品亚洲综合18 | 激情小说图片网 | 男人激烈吮乳吃奶视频免费 | 亚洲精品久久婷婷丁香51 | 久久国产精品成人片免费 | 中文字幕美人妻亅u乚一596 | 亚洲精品福利在线观看 | 天天摸日日操 | 欧美成人aaaaa免费视频 | 日本久久精品免视看国产成人 | 西西人体自慰扒开下部93 | 亚洲中文字幕无码av永久 | 日日av拍夜夜添久久免费 | 亚洲精品无码乱码成人 | 久久久精 | 亚洲精品国产av成拍色拍 | 亚洲av无码不卡无码国产 | 九九成人免费视频 | 国产一级高清视频 | 亚洲欧洲国产成人精品 | 99在线视频网站 | 日韩欧美成人免费观看 | 色综合久久久久综合一本到桃花网 | 中文字幕专区高清在线观看 | 日本mv高清在线成人高清 | 亚洲精品无码专区久久 | 亚洲欧美色鬼久久综合 | 67194在线午夜亚洲 | 很黄很色裸乳视频网站 | 精品人妻无码一区二区三区性 | 欧美成电影综合网站色www | 色婷婷综合中文久久一本 | 992在线观看 | 摸进她的内裤里疯狂揉她动图视频 |