龙空技术网

每日一道剑指offer-数组中重复的数字

释怀了吧 64

前言:

而今看官们对“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数组转数字