学校网站建设汇报,html自动播放视频,ui设计好学吗?要学多久,佛山设计公司排名个人主页#xff08;找往期文章包括但不限于本期文章中不懂的知识点#xff09;#xff1a;我要学编程(ಥ_ಥ)-CSDN博客
由于作者比较菜#xff0c;还没学malloc这个函数#xff0c;因此这个题目只写一些与原题大致的思路。
题目链接#xff1a;645. 错误的集合 - 力扣…个人主页找往期文章包括但不限于本期文章中不懂的知识点我要学编程(ಥ_ಥ)-CSDN博客
由于作者比较菜还没学malloc这个函数因此这个题目只写一些与原题大致的思路。
题目链接645. 错误的集合 - 力扣LeetCode
题目 集合 s 包含从 1 到 n 的整数。不幸的是因为数据错误导致集合里面某一个数字复制了成了集合里面的另外一个数字的值导致集合 丢失了一个数字 并且 有一个数字重复 。 给定一个数组 nums 代表了集合 S 发生错误后的结果。 请你找出重复出现的整数再找到丢失的整数将它们以数组的形式返回。 示例 1 输入nums [1,2,2,4]
输出[2,3]示例 2 输入nums [1,1]
输出[1,2] 思路
我们肯定得一个一个的去排查。那怎么排查呢我们要创建应该数组产生从1~n的数。然后一个一个的比较最后得出结果。 但是这个题目有一个误导的点就是这个原来的数组不一定是有序的需要我们自己将这个数组排成有序这里我们就想到了冒泡排序。升序或者降序都可以
nums//这个是错误的数组
numsSize//这个是错误数组的元素个数
实现
我们就可以先来把这个数组进行排序。
int i 0;
for (i 0; i numsSize - 1; i)//趟数:要排的数-1
{int j 0;for (j 0; j numsSize - 1 - i; j)//每一趟要做的事{if (*(nums i) *(nums i 1))//如果不满足升序就得交换{int tmp *(nums i);*(nums i) *(nums i 1);*(nums i 1) tmp;}}
}
接下来就开始一个一个的比较 。 int count1 0;//记录重复出现的数int count2 0;//记录丢失的数for (i 0; i numsSize; i){if (*(nums i) ! (i 1)){count1 *(nums i);count2 (i 1);}}
找到了就可以打印在屏幕上。
printf(重复出现的数是%d\n, count1);
printf(丢失的数是%d\n, count2);
#include stdio.h
void findErrorNums(int* nums, int numsSize)
{//冒泡排序int i 0;for (i 0; i numsSize - 1; i)//趟数:要排的数-1{int j 0;for (j 0; j numsSize - 1 - i; j)//每一趟要做的事{if (*(nums i) *(nums i 1))//如果不满足升序就得交换{int tmp *(nums i);*(nums i) *(nums i 1);*(nums i 1) tmp;}}}int count1 0;//记录重复出现的数int count2 0;//记录丢失的数for (i 0; i numsSize; i){if (*(nums i) ! (i 1)){count1 *(nums i);count2 (i 1);}}printf(重复出现的数是%d\n, count1);printf(丢失的数是%d\n, count2);
}int main()
{int arr[] { 1,2,2,4 };//可以自己输入想要排查的数int sz sizeof(arr) / sizeof(arr[0]);findErrorNums(arr, sz);return 0;
} 如果我们想要输入排查的数就可以这样写。 int n 0;scanf(%d, n);int arr[n];for (int i 0; i n; i){scanf(%d, (arr i));//只能有一个丢失的数和重复的数} 由于VS2022不支持变长数组所有我就只能输入一个固定的数。