📜  门| GATE-CS-2004 |第 78 题(1)

📅  最后修改于: 2023-12-03 15:42:15.663000             🧑  作者: Mango

门 | GATE-CS-2004 |第 78 题

这是一道出现在 GATE-CS-2004 考试中的题目,它的题干如下:

Consider the following C function. Assume that array A has been initialized with n integers.

int find(int *A, int n) {
    int i, j;
    for(i=0; i<n; i++) {
        int count = 0;
        for(j=0; j<n; j++) {
            if(A[j]==A[i])
                count++;
        }
        if(count==1)
            return A[i];
    }
    return -1;
}

Which of the following statements is true?

A. The function returns the largest element of A that occurs only once.

B. The function returns the smallest element of A that occurs only once.

C. The function returns the largest element of A that occurs more than once.

D. The function returns the smallest element of A that occurs more than once.

该程序实现了一种查找算法,用于查找给定数组 A 中只出现一次的数。从函数的实现可以看出,它同时也是一道嵌套循环的典型例子。

这道题的考点在于理解嵌套循环的运行逻辑,以及对循环变量的掌握。对于循环变量,需要注意它们的作用域和生命周期,以保证算法的正确性和效率。

该程序的基本思路是:使用两个循环分别遍历数组中的每一个元素,并计算每个元素在整个数组中出现的次数。如果某个元素只出现过一次,则将其作为结果返回。如果没有找到只出现一次的数,则返回 -1

在此基础上,我们可以回答题目中的问题:

  • A. 错误。该函数并没有找到数组中出现了且仅出现了一次的最大值。
  • B. 错误。该函数并没有找到数组中出现了且仅出现了一次的最小值。
  • C. 错误。该函数找到数组中出现了且出现次数大于 1 的最大值,但不是唯一返回值。
  • D. 正确。该函数找到数组中出现了且出现次数大于 1 的最小值,并将其作为返回值。

因此,答案为 D。

对于程序员来说,这道题的难点在于对算法的理解和对循环变量的掌握。同时,在编写算法时,需要考虑程序的时间复杂度和空间复杂度,以保证程序的效率。在程序调试和优化时,还需要仔细检查循环边界和边界条件,以避免出现潜在的错误和漏洞。

下面是该程序的 Python 实现:

def find(A: List[int], n: int) -> int:
    for i in range(n):
        count = 0
        for j in range(n):
            if A[j] == A[i]:
                count += 1
        if count == 1:
            return A[i]
    return -1

该程序的时间复杂度为 $O(n^2)$,空间复杂度为 $O(1)$。对于较大的数组,算法可能会较慢。

参考资料:

  • GATE Previous Year Solved Questions
  • How to approach GATE questions?