使用两个for循环找到最不频繁的数字?

时间:2018-03-05 03:35:24

标签: c arrays algorithm

我试图找到数组中最不常见的元素,我尝试使用插入排序对数组进行排序,然后使用两个循环;用于挑选每个元素和内部循环的外部循环以进行比较。

# include <stdio.h>
void LeastFrequentnum(int arr[],int n);
void InsertionSort(int arr[],int n);

    int main()
    {
        int arr[] = {1, 3, 2, 1, 2, 2, 3, 1};
        int n = sizeof(arr)/sizeof(arr[0]);
        LeastFrequentnum(arr,n);
    }

    void LeastFrequentnum(int arr[],int n)
    {
        InsertionSort(arr,n);
        int count = 1;
        int min_count = n+1;// i will update min_count
        int res=-1; // used to store the element which occurs least number of times
        for(int i=0;i<n;)
        {
            count=1;
            for(int j=i+1;j<n;j++)
            {
                if(arr[j]==arr[i])
                {
                    count++;
                }
                else
                {
                    i = j+1;
                    if(count<min_count)
                    {
                       min_count = count;
                       res = arr[j];
                       break;
                    }
                }
            }

        }
        printf("%d",res);
    }

    void InsertionSort(int arr[],int n)
    {
        for(int i=1;i<n;i++)
        {
            int key = arr[i];
            int j = i-1;
            while(j>=0 && arr[j]>key)
            {
                arr[j+1] = arr[j];
                j--;
            }
            arr[j+1]=key;
        }
    }

我尝试过运行它,但运行时结果是超出时间限制的问题。

2 个答案:

答案 0 :(得分:0)

好像有无穷无尽的循环。试试这个。

vendor\bin\phpunit

答案 1 :(得分:0)

我认为这部分代码 - &gt; for(int i=0;i<n;)

我认为你错过了i ++