h5网站建设,福州网站制作策划,广州最近传染病情况,在线培训系统app最近在牛客、力扣上做题#xff0c;花费海量时间#xff0c;苦不堪言#xff0c;有时绞尽脑汁也想不出#xff0c;痛定思痛#xff0c;每日记录写的比较困难的题。 错误的集合 题目如上图所示
题主乍看之下觉得很简单#xff0c;再看例子#xff0c;不就是一个有序数组…最近在牛客、力扣上做题花费海量时间苦不堪言有时绞尽脑汁也想不出痛定思痛每日记录写的比较困难的题。 错误的集合 题目如上图所示
题主乍看之下觉得很简单再看例子不就是一个有序数组找重复和缺的吗感觉很快就可以秒杀殊不知我已经死了。 看到例子之后题主先入为主带偏了自己。注意审题
方法1暴力循环通过内层与外层双重for循环因为题目明确说明是1~n的整数 故
static int arr[2];
int* findErrorNums(int* nums, int numsSize, int* returnSize)
{*returnSize2;int i0;int j0;for(i1;inumsSize;i)//外层循环从1开始{int count0;//计数器for(j0;jnumsSize;j){if(inums[j])count;//对于i出现相同时1,正常情况下count为1}if(count2)//当为2时说明出现重复arr[0]i;if(count0)//为0时缺失arr[1]i;}return arr;
}方法2. 利用冒泡排序因为我学艺不精只会冒泡排序将数组改写为有序数组此时 求重复数时只需要遍历数组与前一个比较即可得到 求被覆盖的数时 要进行分类讨论 1.当是开头丢失时 当是22时 比较nums[0]与1 2.当是末尾丢失时 当是1233时 比较nums[numssize-1]与numssize 3.当处在中间时 与前或后作差为2 例如 当是1224时 4-22 当为1334时 2-12 static int arr[2];
int* findErrorNums(int* nums, int numsSize, int* returnSize)
{*returnSize2;int i0;int j0;int tmp0;for(i0;inumsSize-1;i)//冒泡排序{for(j0;jnumsSize-1-i;j){if(nums[j]nums[j1]){tmpnums[j];nums[j]nums[j1];nums[j1]tmp;}}}for(i0;inumsSize-1;i)//找重复{if(nums[i]nums[i1]){arr[0]nums[i];break;}}//找被覆盖的数然后分情况if(nums[0]!1)arr[1]1;if(nums[numsSize-1]!numsSize)arr[1]numsSize;for(i1;inumsSize;i){if(nums[i]-nums[i-1]2){arr[1]nums[i]-1;break;}}return arr;
}以后每天更新若有不对请及时指出