c - 识别数组的最小唯一元素
问题描述
请允许我强调一个事实,即我是一个初学者,我确信这一事实在我的代码中很明显。
我需要定义一个函数来识别输入数组的 LOWEST UNIQUE(仅出现一次)值,但是我目前的方法是有缺陷的。
我想我正在努力整合问题的各个方面。
我首先通过实现嵌套循环将输入数组的值从最高到最低排序。然后我继续将所有出现多次的值设置为零。最后,我确定更改后的数组的最小唯一值并将其返回。如果数组中不存在唯一值,则返回-1。
我被允许假设输入数组的每个元素都是正数且大于零,并且其长度至少为 1。
int minUnique(int *values, int length)
{
int i, j, temp, min = values[0];
for (i = 0; i < length; i++) { /* sorting */
for (j = 0; j < length - 1; j++) {
if (values[j] < values[j +1]) {
temp = values[j + 1];
values[j + 1] = values[j];
values[j] = temp;
}
}
}
for (i = 0; i < length; i++) {
printf(" %d", values[i]);
}
for (i = 0; i < length; i++) { /* setting 0 */
if (values[i] == values[i + 1]) {
values[i] = 0;
values[i + 1] = 0;
}
}
for (i = 0; i < length; i++) {
printf(" %d", values[i]);
}
for (i = 1; i < length - 1; i++) { /* identifying min */
if ((values[i] < min) && (values[i] != 0)) {
min = values[i];
} else {
count++;
}
} if (count == length) {
return -1;
} else {
return min;
}
}
如果我输入一个数组,例如 values[12] = {3, 7, 5, 6, 3, 4, 8, 4, 5, 8, 12, 11},我希望它被重新组织为 values[12 ] = {12, 11, 8, 8, 7, 6, 5, 5, 4, 4, 3, 3} 和 6 被返回。
我的代码目前返回 3。
该代码不会生成任何错误消息。
注意:您可以忽略 printf 行-它们只是为了帮助我了解正在发生的事情
解决方案
在伪代码中:
1. Sort from lowest to highest.
2. Iterate over the sorted array and return the first element whose neighbors are different.
第一步可以使用qsort()
标准库函数来完成。
推荐阅读
- javascript - 如何调整我的 javascript 代码以使我的书签填充多个搜索栏的项目?
- extjs - 在 extjs4 的另一个组件中使用 flash 组件
- reactjs - 在 Reactjs 自定义挂钩中获取 AWS S3 对象 URL 后,表单数据被转换为假路径
- sql - Sql Query:如何根据行名显示
- python - 如何在python中以各种方式重复:selenium?
- javascript - 我可以通过 express js 中的请求对象访问我在响应对象中设置的项目吗?
- ansible - Playbook 使用文件上的 ini 查找异常失败
- python - 有没有办法我可以使用 .pack() 将 tkinter 按钮彼此相邻放置,同时保持它们居中对齐?
- sql - 比较 Athena 中的字符串变量
- apache-flink - Flink 水印根本没有推进?停留在-9223372036854775808