【力扣第448题】找到所有数组中消失是数字
思路:参考答案
1、将遍历值对应的下标值变为负数,其中如果遍历值对应的下标值本就是负数,则不作改变
2、遍历返回大于0的数下标
代码:
/*** Note: The returned array must be malloced, assume caller calls free().*/
int* findDisappearedNumbers(int* nums, int numsSize, int* returnSize){int *ans=malloc(sizeof(int)*numsSize);*returnSize = 0;int temp;for(int i = 0; i < numsSize; i++){if(nums[i] < 0){temp = nums[i]*(-1) - 1;}else{temp = nums[i]-1;}
if(nums[temp]>0){nums[temp] *= (-1);}}for(int i = 0;i < numsSize;i++){if(nums[i] > 0){ans[(*returnSize)++] = i+1;
}}return ans;
}
【455】分发饼干
思路:
1、先排序,定义一个计数变量temp
2、两重for循环,判断g[i]是否小于等于s[j]
3、若g[i]小于等于s[j],则temp加一,s数组开始遍历值变为j+1(防止重复判断多加);
代码:
int cmp(const void *x,const void *y)
{return *(int*)x-*(int*)y;
}
int findContentChildren(int* g, int gSize, int* s, int sSize) {int temp=0;int m=0;qsort(g,gSize,sizeof(int),cmp);qsort(s,sSize,sizeof(int),cmp);for(int i = 0;i<gSize;i++){for(int j = m;j<sSize;j++){if(g[i] <= s[j]){temp++;m = j+1;break;}}}return temp;//return 1;}
【485】最大连续1的个数
思路:
1、定义计数变量temp和存储temp最大数的变量n
2、遍历判断,为1 temp++;不为1,temp 置0
3、返回n
代码:
int cmp(const void *x,const void *y)
{return *(int*)x-*(int*)y;
}
int findContentChildren(int* g, int gSize, int* s, int sSize) {int temp=0;int m=0;qsort(g,gSize,sizeof(int),cmp);qsort(s,sSize,sizeof(int),cmp);for(int i = 0;i<gSize;i++){for(int j = m;j<sSize;j++){if(g[i] <= s[j]){temp++;m = j+1;break;}}}return temp;//return 1;}