python数据结构笔记之数组

  1. 一个数组存有N+1个自然数,其中包含有N个不同的自然数,从中筛选出重复的自然数
    法1:
#用新的字典存储元素和元素对应的个数
def findDup(array):
    if array == None:
        return -1
    else:
        lens = len(array)
        h = dict()
        i =0
        while i < lens-1:
            h[i] = 0
            i+=1
        j = 0
        while j<lens:
            if h[array[j]-1] == 0:
                h[array[j]-1] = 1
            else:
                return array[j]
            j += 1
        return -1

法2:

#累计求和法
def findDup(array):
    lens = len(array)
    num1 = 0
    num2 = 0
    for i in range(lens):
        num1 += array[i]
        num2 = i+1+num2
        
    num2 = num2-i-1
    return(num1-num2)
        

法3:

#异或法:任何相同的数异或结果为0,不同的元素异或结果不为0,异或运算满足交换律,结合律
def FindDup(array):
    if array == None:
        return -1
    else:
        lens = len(array)
        reult = 0
        for i in range(lens):
            result ^=array[i]
            result ^=(i+1)
        return(result^(i+1))

法4:

#数据映射法:每个元素看作数组的下标都可以对应数组的某个元素,当有重复元素时,它们作为下标会对应同一个元素
#从第一个元素开始,用一个标量记住该元素作为下标去寻找下一个元素,在把这个元素用它的相反数代替,那么当下一个元素为负值时
#证明这个元素之前被指向过,即指向它的上一个元素是重复的元素
def FindDup1(array):
    a = 0
    while array[a]>0:
        array[a] = -array[a]
        a = -array[a]
    return a
  1. 找出数组当中的最大最小元素
#找出数组的最大元素,算法时间长度为N+1(N为奇数),N(N为偶数)
def FindMM(array):
    
    
    for i in range(0,len(array),2):
        if i+1 == len(array):
            array.append(array[i])
        elif array[i] > array[i+1]:
            tmp = array[i]
            array[i] = array[i+1]
            array[i+1] = tmp
                 
      
    minone = array[0]
    maxone = array[1]
    for j in range(2,len(array)-1,2):
        if array[j] < minone:
            minone = array[j]
        if array[j+1] > maxone:
            maxone = array[j]
    return minone, maxone
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值