首页 > 试题广场 >

移动 0

[编程题]移动 0
  • 热度指数:3883 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给定一个数组,请你实现将所有 0 移动到数组末尾并且不改变其他数字的相对顺序。

数据范围:数组长度满足 ,数组中的元素满足
示例1

输入

[1,2,0,3]

输出

[1,2,3,0]
示例2

输入

[1,2,3]

输出

[1,2,3]
示例3

输入

[0,0]

输出

[0,0]
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param nums int整型一维数组 
 * @param numsLen int nums数组长度
 * @return int整型一维数组
 * @return int* returnSize 返回数组行数
 */
int* moveZeroes(int* nums, int numsLen, int* returnSize ) {
    // write code here
    int *ans=(int *)malloc(sizeof(int)*2000);
    *returnSize=numsLen;
    int k=0;
    //int j=numsLen;
    int i=0;
    for(k=0;k<numsLen;k++){
        if(nums[k]!=0){
            ans[i++]=nums[k];
        }
    }
    for(int j=i;j<numsLen;j++)
         ans[j]=0;
    // for(k=0;k<numsLen;k++){
    //     if(nums[k]==0){
    //         ans[j++]=0;
    //     }
    //     else{
    //         ans[i++]=nums[k];
    //     }
    // }
    // memmove(ans+i, ans+numsLen,(j-numsLen)*sizeof(int));
    return ans;
}

发表于 2022-12-23 22:24:15 回复(0)
int g_arr[1000] = {0}; // 创建一个数组
int* moveZeroes(int* nums, int numsLen, int* returnSize ) {
    // write code here
    int i = 0;
    int t = 0;
    for (i = 0; i < numsLen; i++) {
        if (nums[i] != 0) {
            g_arr[t++] = nums[i];
        }
    }
    *returnSize = numsLen;
    return g_arr;
}

创建一个大数组,可以保存题目要求最多数据,
遍历输入数组,将非零数据存入新数组即可,
返回长度为输入长度。
发表于 2022-01-16 14:49:04 回复(0)

问题信息

难度:
2条回答 1426浏览

热门推荐

通过挑战的用户

查看代码