You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言实现:找出给定数组中的最小唯一值

解决思路与实现代码

嘿,你的思路完全靠谱!先提取数组里的唯一值,再从这些唯一值里找最小值,在只能用<stdio.h>和<string.h>的C环境下完全能实现。下面我给你一步步拆解实现方法,再附上完整代码:

核心步骤拆解

  1. 提取唯一值:用一个临时数组存储已经出现过的元素,遍历原数组时,检查当前元素是否已经在临时数组中——如果不在,就把它加入临时数组。
  2. 找唯一值的最小值:遍历存储唯一值的临时数组,通过对比更新最小值即可。

完整实现代码

#include <stdio.h>
#include <string.h>

int main() {
    // 示例数组,你可以替换成自己的数组
    int arr[] = {5, 3, 2, 5, 3, 7, 2, 1, 7};
    // 计算原数组的元素个数
    int arr_size = sizeof(arr) / sizeof(arr[0]);
    // 临时存储唯一值,最坏情况所有元素都唯一,所以大小设为原数组大小
    int unique_arr[arr_size];
    int unique_count = 0; // 记录唯一值的数量

    // 第一步:筛选数组中的唯一值
    for (int i = 0; i < arr_size; i++) {
        int is_unique = 1; // 默认当前元素是唯一的
        // 检查当前元素是否已经在唯一值数组里
        for (int j = 0; j < unique_count; j++) {
            if (arr[i] == unique_arr[j]) {
                is_unique = 0;
                break; // 找到重复,跳出内层循环
            }
        }
        // 如果是唯一值,加入临时数组
        if (is_unique) {
            unique_arr[unique_count++] = arr[i];
        }
    }

    // 边界处理:如果原数组为空,直接提示
    if (unique_count == 0) {
        printf("数组为空,无法获取最小值\n");
        return 1;
    }

    // 第二步:从唯一值数组中找最小值
    int min_val = unique_arr[0]; // 初始最小值设为第一个唯一值
    for (int i = 1; i < unique_count; i++) {
        if (unique_arr[i] < min_val) {
            min_val = unique_arr[i];
        }
    }

    // 输出结果,方便验证
    printf("数组中的唯一值:");
    for (int i = 0; i < unique_count; i++) {
        printf("%d ", unique_arr[i]);
    }
    printf("\n唯一值中的最小值:%d\n", min_val);

    return 0;
}

关键细节说明

  • 数组长度计算:用sizeof(arr)/sizeof(arr[0])是C语言中计算静态数组长度的标准方式,不用手动写死元素个数。
  • 重复检查逻辑:通过双层循环实现,虽然时间复杂度是O(n²),但对于普通规模的数组完全够用,而且完全符合你只能用指定头文件的要求。
  • 边界处理:加入了空数组的判断,避免程序出现未定义行为。
  • 扩展性:如果需要处理其他类型的数组(比如char),只需要把所有int类型改成对应类型即可,核心逻辑不变。

内容的提问来源于stack exchange,提问作者Devin Kent

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:20:27