剑指Offer03:数组中重复的数字(Golang/Python/C#)

原题链接剑指Offer03:数组中重复的数字
时间复杂度 O(N) : 遍历数组使用 O(N) ,每轮遍历的判断和交换操作使用 O(1)。
空间复杂度 O(1) : 使用常数复杂度的额外空间。

Golang

package main
import "fmt"

func findRepeatNumber(nums []int) int {
	i := 0
	for i < len(nums) {
		if nums[i] == i {
			i++
			continue
		}
		if nums[nums[i]] == nums[i] {
			return nums[i]
		}
		nums[nums[i]], nums[i] = nums[i], nums[nums[i]]
	}
	return -1
}
func main() {
	input := [...]int{1, 2, 3, 4, 5, 2}
	res := findRepeatNumber(input[:])
	fmt.Println(res)
}

Python

from typing import List


class Solution:
    @staticmethod
    def findRepeatNumber(nums: List[int]) -> int:
        if not nums: return -1
        i = 0
        while i < len(nums):
            if nums[i] == i:
                i += 1
                continue
            if nums[nums[i]] == nums[i]: return nums[i]
            nums[nums[i]], nums[i] = nums[i], nums[nums[i]]
        return -1


if __name__ == "__main__":
    nums: List[int] = [2, 3, 1, 0, 2, 5, 3]
    solution: Solution = Solution()
    print(solution.findRepeatNumber(nums=nums))

C#

public class Solution
{
    public int FindRepeatNumber(int[] nums)
    {
        if (nums.Length == 0) return -1;
        int i = 0;
        while(i < nums.Length) {
            if(nums[i] == i) {
                i++;
                continue;
            }
            if (nums[nums[i]] == nums[i]) return nums[i];
            int tmp = nums[nums[i]];
            nums[nums[i]] = nums[i];
            nums[i] = tmp;
        }
        return -1;

    }
}
class Program
{
    static void Main(string[] args)
    {
        int[] nums = { 2, 3, 1, 0, 2, 5, 3 };
        Solution solution = new Solution();
        Console.WriteLine(solution.FindRepeatNumber(nums));
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HydroCoder

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值