C语言实现:找出给定数组中的最小唯一值
解决思路与实现代码
嘿,你的思路完全靠谱!先提取数组里的唯一值,再从这些唯一值里找最小值,在只能用<stdio.h>和<string.h>的C环境下完全能实现。下面我给你一步步拆解实现方法,再附上完整代码:
核心步骤拆解
- 提取唯一值:用一个临时数组存储已经出现过的元素,遍历原数组时,检查当前元素是否已经在临时数组中——如果不在,就把它加入临时数组。
- 找唯一值的最小值:遍历存储唯一值的临时数组,通过对比更新最小值即可。
完整实现代码
#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
相关产品推荐
相关产品推荐

