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
浙公网安备 33010602011771号