美文网首页
数组中的重复数字

数组中的重复数字

作者: 九日火 | 来源:发表于2020-05-25 16:57 被阅读0次

替换位置,查找到a[i] == i 情况时返回结果

def use_map(numbers):
    """
    使用哈希表结构
    :param numbers:
    :return:
    """
    num_map = dict()
    for number in numbers:
        if number in num_map:
            print(number)
        else:
            num_map[number] = True

# -*- coding:utf-8 -*-
class Solution:
    # 这里要特别注意~找到任意重复的一个值并赋值到duplication[0]
    # 函数返回True/False
    def duplicate(self, numbers, duplication):
        # write code here
        size = len(numbers)
        if not size:
            return False
        for i in range(size):
            if numbers[i] < 0 or numbers[i] > size - 1:
                return False
        for i in range(size):
            while numbers[i] != i:  
                if numbers[i] == numbers[numbers[i]]:
                    duplication[0] = numbers[i]
                    return True
                m = numbers[i]
                numbers[i] = numbers[m]
                numbers[m] = m
        return False

func duplicateInArray(nums []int) int {
    if nums == nil || len(nums) <= 0 {
        return -1
    }
    for j := 0; j < len(nums)-1; j++ {
        if nums[j] > len(nums)-1 || nums[j] < 0 {
            return -1
        }
    }
    for i := 0; i < len(nums)-1; i++ {
        for nums[i] != i {
            if nums[i] == nums[nums[i]] {
                return nums[i]
            } else {
                nums[i], nums[nums[i]] = nums[nums[i]], nums[i]
            }
        }
    }
    return -1
}

不修改数组,查找重复数字。类二分法


func duplicateInArray(nums []int) int {
    var middle int
    var start = 1
    var end = len(nums) - 1
    if nums == nil || len(nums) == 1 {
        return -1
    }
    for start <= end {
        middle = (end-start)/2 + start
        choose := search(nums, start, middle)
        if start == end {
            return start
        }
        if choose == 1 {
            end = middle
        } else {
            start = middle + 1
        }
    }
    return middle
}
 
func search(nums []int, start, middle int) int {
    num := 0
    for i := 0; i < len(nums); i++ {
        if nums[i] <= middle && nums[i] >= start {
            num++
        }
    }
    if num <= middle-start+1 {
        return 0
    } else {
        return 1
    }
1.非递归思路

#这个函数的作用是找到重复数组所在的区间
def reduce_inter(nums, s, b):
    mid = (s + b) // 2
    count = 0
    n=len(nums)
    for i in range(n):
        if (nums[i] >= s) and (nums[i] <= mid):
            count += 1
    if count > mid-s+1:
        return s, mid
    else:
        return mid+1, b

#找到数字
def find_repeat(nums):
    s, b = 1, len(nums)-1
    while s != b:
        s, b =reduce_inter(nums, s, b)
    return s
 

2.递归思路

def loop_search(nums, l, r):
    if l == r:
        return l
    mid = (l + r) // 2
    count = 0
    n = len(nums)
    for i in range(n):
        if (nums[i] >= l) and (nums[i] <= mid):
            count += 1
    if count > mid - l + 1:
        return loop_search(nums, l, mid)
    else:
        return loop_search(nums, mid+1, r)

相关文章

  • 剑指offer题集

    [3] 数组中重复的数字 题目一:找出数组中重复的数字 Description 在一个长度为n的数组里的所有数字都...

  • LeetCode 每日一题 [38] 数组中重复的数字

    LeetCode 数组中重复的数字 [简单] 找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数...

  • 剑指offer4J【C2 P3】找出数组中重复数字

    题目 找出数组中重复的数字数组中数字都在0~n之间,其中有些数字是重复的,但不知道谁重复,可能有1到多个重复的数字...

  • 面试题03. 数组中重复的数字

    数组中重复的数字 题目描述 找出数组中重复的数字。 在一个长度为 n 的数组 nums 里的所有数字都在 0~n-...

  • 数组中重复的数字

    题目一:找出数组中重复的数字 在一个长度为 n 的数组里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复...

  • 剑指offer学习笔记:8.1 数组

    面试题51:数组中重复的数字在一个长度为n的数组中,所有数字都在0到n-1的范围内。数组中的某些数字是重复的,但是...

  • 数组中重复的数字

    题目描述 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重...

  • 数组中重复的数字

    数组中重复的数字 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个...

  • 数组中重复的数字

    题目描述 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重...

  • 数组中重复的数字

    在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不...

网友评论

      本文标题:数组中的重复数字

      本文链接:https://www.haomeiwen.com/subject/fxoyahtx.html