LeetCode217.存在重复元素(C语言)
1.题目

2.解题思路
看见这题,我的思路是先进行排序,将其排序好的数组比较前两个数字,相同就输出true,不同就输出false。但是这个思路只是对了一部分,在比较排序好的数组不仅仅比较前两个数字,这样会遗漏排在后面的相同数字(比如1 2 2 3),从而使程序发生错误,所以改进的思路是排序好的数组应当每个都比较,不遗漏,最后输出true或者false。
bool containsDuplicate(int* nums,int numsSize)
题目开头已经给好,nums是输入数组的名称,numsSize是这个数组的大小。下面就是开始思路的第一步是排序,可选择冒泡排序。
冒泡排序首先定义所需要的变量,下标从0开始,然后和numsSize比较进行循环。
int i ,j,temp; for(i=0;i<numsSize;i++) for(j=0;j<numsSize-1-i;j++) { if(nums[j]>nums[j+1]) { temp=nums[j]; nums[j]=nums[j+1]; nums[j+1]=temp; } }
接下来利用循环输出这个已经排序好的数组
for(i = 0;i<numsSize;i++) { printf("%d",nums[i]); }
然后挨个进行比较排序好的数组的数字,同样利用循坏。
for(i=0;i<numsSize-1;i++) { if(nums[i]==nums[i+1]) return true; else continue; } return false;
写完应当举例比较一下,如果numsSize不减去一循环就不够所以要注意。
挨个比较要把这个循环执行到不能执行为止从而输出false,continue语句的作用就是当这个比较的两个不相等从而进行下一个比较而不是忽略后面重复数字直接输出true。(此处我想了break,但是break是终止循环,不再判断这个循环是否继续执行,所以不能使用break。)比较到循环结束都没有相等的就最后return false以此结束。
整个连贯起来基本程序已经写好,以目前所学知识和想到的思路来看,暂时无法写出更快的解法。
3.代码
bool containsDuplicate(int* nums, int numsSize) { int i,j,temp; for(i=0;i<numsSize;i++) for(j=0;j<numsSize-1-i;j++) { if(nums[j]>nums[j+1]) { temp=nums[j]; nums[j]=nums[j+1]; nums[j+1]=temp; } } for(i = 0;i<numsSize;i++) { printf("%d",nums[i]); } for(i=0;i<numsSize-1;i++) { if(nums[i]==nums[i+1]) return true; else continue; } return false; }
浙公网安备 33010602011771号