学习时间:
2023年1月26日
题目描述:

题解分享:
// 作 者 : 繁 华 倾 夏
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
// 力扣(LeetCode):283. 移动零
// 方法一:移动元素位置
void moveZeroes1(int* nums, int numsSize) {
int i, j = 0;
for (i = 0; i < numsSize; i++) { // 遍历数组将不为零的元素覆盖值为零的位置
if (nums[i] != 0) {
nums[j++] = nums[i];
}
}
while (j < numsSize) { // 将剩余空位补零
nums[j++] = 0;
}
}
// 方法二:二分查找法
void swap(int* a, int* b) {
int t = *a;
*a = *b, * b = t;
}
void moveZeroes2(int* nums, int numsSize) {
int left = 0, right = 0;
while (right < numsSize) {
if (nums[right]) {
swap(nums + left, nums + right);
left++;
}
right++;
}
}
// 测试用例
// 输入 nums = [0, 1, 0, 3, 12]
// 输出 [1, 3, 12, 0, 0]
int main() {
int nums[] = { 0,1,0,3,12 };
int numsSize = sizeof(nums) / sizeof(nums[0]);
moveZeroes1(nums, numsSize);
//moveZeroes2(nums, numsSize);
for (int i = 0; i < numsSize; i++) {
printf("%d ",nums[i]);
}
return 0;
}
【繁华倾夏】【每日力扣题解分享】【Day12】