MST
星途 面试题库

面试题:C语言一维数组下标引用的高级技巧

已知有一个大型的一维数组 `int bigArray[10000];`,数组元素是无序的整数。现在要编写一个函数,利用C语言一维数组下标引用技巧,高效地找出数组中值等于某个给定目标值 `target` 的所有元素下标,并将这些下标存储到另一个数组 `result` 中返回。请描述实现思路,并写出核心代码。要求代码尽可能高效,避免不必要的循环和内存浪费。
11.3万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试

实现思路

  1. 遍历大型一维数组 bigArray
  2. 对于每个元素,检查其值是否等于目标值 target
  3. 如果相等,则将其下标存入 result 数组。
  4. 记录找到的下标的数量,以便返回有效结果。

核心代码

#include <stdio.h>

// 函数声明
int* findIndices(int bigArray[], int size, int target, int *resultSize);

int main() {
    int bigArray[10000];
    // 假设这里已经填充了数组元素
    int target = 5;
    int resultSize;
    int *result = findIndices(bigArray, 10000, target, &resultSize);

    for (int i = 0; i < resultSize; i++) {
        printf("%d ", result[i]);
    }
    // 记得释放动态分配的内存
    free(result);
    return 0;
}

int* findIndices(int bigArray[], int size, int target, int *resultSize) {
    int *result = (int*)malloc(size * sizeof(int));
    if (result == NULL) {
        // 内存分配失败处理
        *resultSize = 0;
        return NULL;
    }
    *resultSize = 0;
    for (int i = 0; i < size; i++) {
        if (bigArray[i] == target) {
            result[(*resultSize)++] = i;
        }
    }
    // 重新分配内存以匹配实际结果数量
    result = (int*)realloc(result, *resultSize * sizeof(int));
    return result;
}