前言:
而今看官们对“python数组转数字”可能比较讲究,大家都想要了解一些“python数组转数字”的相关资讯。那么小编也在网络上搜集了一些关于“python数组转数字””的相关知识,希望咱们能喜欢,兄弟们快快来学习一下吧!题目:
在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。
示例 1:
输入:
[2, 3, 1, 0, 2, 5, 3]
输出:2 或 3
限制:
2 <= n <= 100000
解析:由题目我们可以知道,本题是求重复的数字,而且不管重复几个只需要返回一个即可,根据这个要求,就有好几种方法可以解决。
第一种:暴力解法,就是直接双重for遍历,将【每个数】跟【接下来的数】比较,相同直接返回即可(例如:[1,2,3,3],让1和接下来的2,3,3进行比较。2和3,3进行比较,只要存在直接返回)。(时间复杂度高,会超时)
def findRepeatNumber1(nums:list) ->int: for i in range(len(nums)): for j in range(i+1,len(nums)): if nums[i]==nums[j]: return nums[i]
注:有人可能对python参数后边加类型,跟箭头不太明白,这是python3.5之后的新特性,提示函数输入参数和返回值的类型应该是什么,便于阅读代码。(不过传入跟提示的类型不一致的参数也不会报错)
第二种:针对第一种解法,利用python的切片特性,将两个for循环变为一个。(将【每个数】和【剩下的数】进行判断,在【剩下的数】中则返回,例如,【4,5,6,4],4在[5,6,4]中则直接返回4即可)
def findRepeatNumber2(nums:list) ->int: for i in range(len(nums)): if nums[i] in nums[i+1:]: #利用python切片,将数组分为未判断和当前判断的.当前判断的数存在与未判断的数中,则重复 return nums[i]
第三种:用字典(或者set集合也可以),将数存入字典,当键重复时直接返回键即可。
def findRepeatNumber3(nums:list) ->int: num_dict ={} for num in nums: if num in num_dict: return num else: num_dict[num] = 1
第四种:先排序再判断相邻元素是否相同,相同时直接返回即可。
def findRepeatNumber4(nums:list) ->int: nums.sort() for i in range(len(nums)-1): if nums[i]==nums[i+1]: return nums[i]
执行结果:
标签: #python数组转数字