【力扣第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;
}