LeetCode(C语言) - 283. 移动零

https://leetcode.cn/problems/move-zeroes/

提交代码1

void moveZeroes(int* nums, int numsSize){
	int diff=0;
	int arr[numsSize];
	for(int i=0;i<numsSize;i++){
		if(nums[i]==0){
			diff++;
			arr[i] = 0;
		}else{
			arr[i] = diff;
		}
	}
	for(int i=0;i<numsSize;i++){
		if(arr[i]!=0){
			nums[i-arr[i]] = nums[i];
		}
	}
	for(int i=numsSize-diff;i<numsSize;i++){
		nums[i] = 0;
	}
}

执行结果

执行结果:
通过
显示详情
添加备注

执行用时:
80 ms
, 在所有 C 提交中击败了
54.43%
的用户
内存消耗:
14.8 MB
, 在所有 C 提交中击败了
51.36%
的用户
通过测试用例:
74 / 74

完整代码1

#include <stdio.h>
void moveZeroes(int* nums, int numsSize){
	int diff=0;
	int arr[numsSize];
	for(int i=0;i<numsSize;i++){
		if(nums[i]==0){
			diff++;
			arr[i] = 0;
		}else{
			arr[i] = diff;
		}
	}
	
//	for(int i=0;i<numsSize;i++){
//		printf("%d ",arr[i]);
//	}
//	printf("\n");
	
	for(int i=0;i<numsSize;i++){
		if(arr[i]!=0){
			nums[i-arr[i]] = nums[i];
		}
	}
	for(int i=numsSize-diff;i<numsSize;i++){
		nums[i] = 0;
	}
}
main(){
	
	int a[] = {0,1,0,3,12};
//	int a[] = {0};
//	int a[] = {0,0,1};

	int len = sizeof (a) / sizeof (int);
	
	for(int i=0;i<len;i++){
		printf("%d ",a[i]);
	}
	printf("\n");
	
	moveZeroes(a,len);
	
	for(int i=0;i<len;i++){
		printf("%d ",a[i]);
	}
	printf("\n");
}

控制台输出

0 1 0 3 12
1 3 12 0 0

--------------------------------
Process exited after 0.4795 seconds with return value 0
请按任意键继续. . .

提交代码2

我还真是傻,建一个新数组,非0元素直接往里面堆不就好了

void moveZeroes(int* nums, int numsSize){
	int j=0;
	int arr[numsSize];
	for(int i=0;i<numsSize;i++){
		if(nums[i]){
			arr[j] = nums[i];
			j++;	
		}
	}
	for(;j<numsSize;j++){
		arr[j] = 0;
	}
	
	for(int i=0;i<numsSize;i++){
		nums[i] = arr[i];
	}
}

执行结果

执行结果:
通过
显示详情
添加备注

执行用时:
96 ms
, 在所有 C 提交中击败了
23.31%
的用户
内存消耗:
14.7 MB
, 在所有 C 提交中击败了
88.07%
的用户
通过测试用例:
74 / 74
posted @ 2022-05-12 20:46  孤舟浮岸  阅读(61)  评论(0)    收藏  举报