【Array】

一、
在这里插入图片描述算法思路:
遍历数组对数组内元素进行遍历,遇到元素为1时计数count++,当遇到0时比较result和count把最大值赋给result,并且把count置为0,继续遍历剩下的数组元素。
注意:当遍历完数组后没有把最大值赋给result,所以在printf时应该打印max值,把最后一次count也跟之前的result比较。

#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
	int arr[]={1,1,0,1,1,1};
	int count=0,result=0;
	int i;
	int size=sizeof(arr)/sizeof(arr[0]);
//	printf("%d",size);
	for(i=0;i<size;i++)
	{
		if(arr[i]==1)
		{
			count++;
		}
		else
		{
			result=max(result,count);
			count=0;

		}
	}
	printf("result=%d\n",max(result,count));
	return 0;
}

int max(int a,int b){
		
	int ret;
	if(a>b)
		ret=a;
	else
		ret=b;
	return ret;
}

二、
在这里插入图片描述先对数组进行遍历,把不等于0的数都放到数组左侧,最后将数组右侧值置为0;

#include <stdio.h>
int main(int argc, char *argv[])
{
	int arr[]={0,1,0,3,12};
	int index=0,i=0;
	int size=sizeof(arr)/sizeof(arr[0]);
	for(i=0;i<size;i++)
	{
	if(arr[i]!=0)
	{
	arr[index]=arr[i];
	index++;
	
	
	}
	}
	for(i=index;i<size;i++)
	{
	arr[i]=0;
	
	}
	for(i=0;i<size;i++)
	{
	printf("%d ",arr[i]);
	
	}
	
	return 0;
}

二、
在这里插入图片描述

由于题目要求删除数组中等于 val 的元素,因此输出数组的长度一定小于等于输入数组的长度,我们可以把输出的数组直接写在输入数组上。可以使用双指针:右指针 right\textit{right}right 指向当前将要处理的元素,左指针 指向下一个将要赋值的位置。

如果右指针指向的元素不等于 val,它一定是输出数组的一个元素,我们就将右指针指向的元素复制到左指针位置,然后将左右指针同时右移;
 如果右指针指向的元素等于 val,它不能在输出数组里,此时左指针不动,右指针右移一位。
整个过程保持不变的性质是:区间 [0,left) 中的元素都不等于 val。当左右指针遍历完输入数组以后,left 的值就是输出数组的长度。 这样的算法在最坏情况下(输入数组中没有元素等于 val),左右指针各遍历了数组一次。
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
	int arr[]={0,1,2,2,3,0,4,2};
	int value=2;
	int size=sizeof(arr)/sizeof(arr[0]);
	int left=0,right;
	for(right=0;right<size;right++)
	{
		if(arr[right]!=value)
		{
		arr[left]=arr[right];
		left++;
		
		}	
	}

	printf("%d\n",left);
	return 0;
	
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值