找出數組中重複的數字(c語言)

找出數組中重複的數字(c語言)讓人瑟瑟發抖的面試題


來我們看一下題目
在一個 長度爲n的數組裏的所有數字都在0~n-的範圍內。數組中某些數字是重複的,但不知道有幾個數字重複倫理,也不知道每個數字重複了多少次,找出任意一個重複的數字
注意:時間複雜度O(n),空間複雜度O(1)

找出數組中重複的數字(c語言)怎麼解決勒???
分析:利用題目中0~n-1範圍,可以運用數組下標和數組內容進行比較
if (arr[i] != arr[arr[i]]),如果不相等時,進行調換,相等時,直接返回值
找出數組中重複的數字(c語言)來看看代碼

#include<stdio.h>
#define SIZE(arr) sizeof(arr)/sizeof(arr[0])//數組長度

void Swap(int *left, int *right)
{
    int tmp = *left;
    *left = *right;
    *right = tmp;
}
int duplicate(int arr[],int len)
{
    int i;
    if (len < 0)
    {
        return 0;
    }
    for (i = 0; i < len; i++)
    {
        if (arr[i] < 0 || arr[i]>len - 1)//限定數字大小
        {
            return 0;
        }
        while (arr[i] != i)
        {
            if (arr[i] != i)
            {
                if (arr[i] != arr[arr[i]])//數組中數字是否等於以數字爲下標的數字
                {
                    Swap(&arr[i], &arr[arr[i]]);
                }
                else
                {
                    return arr[i];
                }
            }
        }
    }
    return 0;
}
int main()
{
    int arr[] = {2,3,1,0,2,5,3};
    printf("%d", duplicate(arr, SIZE(arr)));
    return 0;
}

找出數組中重複的數字(c語言)總結:數組中數據給定範圍之後,可以多利用下標 i 進行求解

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章