LeetCode(27):移除元素

移除元素

题目链接

题目:给你一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并原地修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

//双指针法*** 
#include
int remove(int *nums,int length,int val){
	int slow=0;
	for(int fast=0;fast
//写复杂了,LeetCode编译也不通过 
#include
int remove(int *nums,int length,int val){
	if(length==0)//数组为空 
		return -1; 
	int i=0,j=length-1;
	for(;i<=j;i++){
		while(nums[i]==val&&i<=j){	
			if(nums[j]!=val){	//数组后不为val的值换掉前面的val值 
				nums[i]=nums[j];
				j--;
			}
			else if(nums[j]==val)//j找到不为val的值为止 
				j--;
		}
		if(nums[i]==val)//说明j遍历完,每个元素值都为val 
			break;
	}
	if(i>0&&nums[i]==val)//前面都换好了,最后一个遍历完也没法换了 
		return i-1;
	else if(i==0&&nums[i]==val)//所有元素值都为val 
		return -2;
	else 
		return i;
}

int main(){
	int nums[]={0,1,2,2,3,0,4,2};
	int val;
	int length=sizeof(nums)/sizeof(nums[0]);
	scanf("%d",&val);
	length=remove(nums,length,val);
	if(length==-1)
		printf("[]");
	else if(length==-2)
		printf("所有元素值均为val"); 
	else{
		for(int i=0;i

你可能感兴趣的:(LeetCode经典题,leetcode,c语言)