在一个长度为n的数组里的所有数字都在1到n-1的范围内。 有一个数字重复若干次,找出这个数字。
2017-07-13 17:40
846 查看
一般的方法还是见一个字典保存已经出现的数字,然后判断后面的数字是否出现在字典中。
节省空间复杂度的方法,利用保存着1~N-1这个条件。具一个特例,重复的数字出现两次,那么1~N-1都至少出现一次,当这些数字在自己的位置即a
=n,此时出现a[0]的数字就是重复的。
a[0]保存的肯定不是0,假设a[0]=3,a[3]=5 将a[0]与a[3]交换,现在a[3]=3,a[0]=5, 在将a[0]与a[5]交换,直到交换到该位置中的数与我想换进去的数相等则跳出。
def get_dup(lst):
key = lst[0]
while not lst[key]==key:
lst[0], lst[key] = lst[key], lst[0]
key=lst[0]
return key
def get_dup(lst): cnt={} for i in lst: if i in cnt: return i else: cnt[i]=1
节省空间复杂度的方法,利用保存着1~N-1这个条件。具一个特例,重复的数字出现两次,那么1~N-1都至少出现一次,当这些数字在自己的位置即a
=n,此时出现a[0]的数字就是重复的。
a[0]保存的肯定不是0,假设a[0]=3,a[3]=5 将a[0]与a[3]交换,现在a[3]=3,a[0]=5, 在将a[0]与a[5]交换,直到交换到该位置中的数与我想换进去的数相等则跳出。
def get_dup(lst):
key = lst[0]
while not lst[key]==key:
lst[0], lst[key] = lst[key], lst[0]
key=lst[0]
return key
相关文章推荐
- 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{
- 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是重复的数字2或者3
- 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。
- 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{
- 数组中有一个数字出现的次数超过了数组长度的一半,请找出这个数字。
- 有个数组中有100w个数,其中有一个数重复了50w次,要求找出这个数字
- 数组中有一个数字出现的次数超过了数组长度的一半,找出这个数字
- 一个长度为N的整形数组,数组中每个元素的取值范围是[0,N-1],写一个算法判断数组中是否存在重复的数字
- 一组数据中只有一个数字出现了一次。 其他所有数字都是成对出现的。请找出这个数字(数组指针的方法)
- 数组中有一个数字出现的次数超过了数组长度的一半,找出这个数
- 面试:数组中有一个数字出现的次数超过了数组长度的一半,找出这个数
- 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在
- 数组中一个数字出现的次数超过了数组长度的一半,找出这个数字
- 数组中有一个数字出现的次数超过了数组长度的一半,找出这个数
- 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。
- 数组中有一个数字出现的次数超过了数组长度的一半,找出这个数字。
- 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在
- 给定一个数组,当中有正负数,求当中的一段“子数组”(即任意长度,连续的数字), 使得这个“子数组”的和是所有“子数组”和中最大的
- 一个数组arr,长度为N,N小于10^8,里面数字的范围是1~N,是否有重复,并统计出来
- 数组中一个数字出现的次数超过了数组长度的一半,找出这个数字