日常刷题中🐵前言:
当我们学习语言的过程中,刷题是相当重要的部分,它不仅可以提高我们的编程思维,同时也能锻炼自己的代码能力,所以我们要保证自己的刷题量 。给自己定个小目标,每天都要提交GitHub,每天给自己整一个绿点。
我的刷题代码都在Exercise库中提交。
GitHub网址:diwei00 (github.com)https://github.com/diwei00
LeetCode链接:剑指 Offer 03. 数组中重复的数字 - 力扣(LeetCode)https://leetcode.cn/problems/shu-zu-zhong-zhong-fu-de-shu-zi-lcof/
题目:分析:🎈找出数组中重复的数字。
在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。
示例1:
输入: [2, 3, 1, 0, 2, 5, 3] 输出: 2 或 3限制:
2 <= n <= 100000
要想遍历这个数组找出重复的数据,因为不知道是哪个数据重复,所以在遍历的时候无法进行比较。那么就考虑先开辟一个同样大小的数组,先把第一个数据拷贝进去。当拷贝后面数据时,每拿一个数据和新开辟数组数据全比较一遍 ,如果有相同的数据则就是重复的数字,直接返回,如果没有则就把这个数据入进新开辟的数组。
代码实现:int findRepeatNumber(int* nums, int numsSize)
{
int* arr = (int*)malloc(sizeof(int) * numsSize);
int index = 0;
int i = 0;
//先把第一个数据入进去
arr[index++] = nums[0];
int sz_arr = 1;//记录容量
for(i = 1; i < numsSize; i++)
{
int j = 0;
for(j = 0; j < sz_arr; j++)
{
if(nums[i] != arr[j])
{
;
}
else
{
//相同,直接返回
return nums[i];
}
}
//新数组中没有重复的数字,则入数据
arr[index++] = nums[i];
sz_arr++;
}
free(arr);
arr = NULL;
//没有重复的数据返回-1
return -1;
}
小结:
每种题目都有好多种解法,往往要想出最优解是不容易的,所以我们要多刷题,锻炼我们的编程思维,相信我们坚持下去会有不一样的收获。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)