美文网首页
面试题-数组排序。(将数组内0值数置于前部,非0值不改变排列顺序

面试题-数组排序。(将数组内0值数置于前部,非0值不改变排列顺序

作者: L4x | 来源:发表于2021-04-15 09:38 被阅读0次

近期参与了几次面试。深圳的公司对于数据结构与算法比在厦门的公司更加的重视。很可惜平时工作中积累的不足,面试时都表现的不太好。

具体面试题可以简单的表现为:
输入数组 array = [1,2,3,0,4,5,6,0,7,8,9];
输出数组 array = [0,0,1,2,3,4,5,6,7,8,9];

面试官要求简单的执行一次循环并且在不增加空间的情况下完成。

以下是面试结束之后,隔天思考出来的具体解法:


NSArray * data = @[@"1",@"2",@"0",@"3",@"4",@"0",@"5",@"6",@"0",@"7",@"8",@"0",@"9"];
    NSMutableArray * mudata = [NSMutableArray arrayWithArray:data];
    int j=0;//已有0的数量,也等于已有0的位置.
    for (int i =(int)data.count-1; i>=0; i--) {
        
        int value = [mudata[i]intValue];
        
        //1.便利。遇到数值为0的记录下来位置。
        //2.遇到非0的数就跟记录下的0的位置进行交换。
        if (value == 0) {
            j++;
        }
        else
        {
            if (j>0) {
                
                //说明此时有为0的数值。需要进行数值交换,›
                
                int tempValue = [mudata[i]intValue];//当前的非0值.
                //需要往后面移动的位数为j
                mudata[i+j] = [NSString stringWithFormat:@"%d",tempValue];
                mudata[i] = [NSString stringWithFormat:@"0"];
            }
        }
    }
    NSLog(@"0全部在前面拉%@",mudata);

通过双指针的技巧,完成功能。

Tips:如果需要将0值全部置于数组后部,非0值不改变排序置于前部。可以通过正序遍历数组,之后同样是记录下0值,当存在0值需要更换位置时,相应的通过i-j来找到需要替换数值的位置.

相关文章

  • 面试题-数组排序。(将数组内0值数置于前部,非0值不改变排列顺序

    近期参与了几次面试。深圳的公司对于数据结构与算法比在厦门的公司更加的重视。很可惜平时工作中积累的不足,面试时都表现...

  • 求一个有序数组中绝对值最小的值

    有一个已经排序的数组(升序),数组中可能有正数、负数或0,求数组中元素的绝对值最小的数,要求,不能用顺序比较的方法...

  • 每日两道算法题 - 移动零

    问题 给定一个数组,在原数组上(在原数组上操作,不能使用新数组)将非0值向前移动,零值向后移动,并保证非零值在操作...

  • 数组

    数组(Array) 数组(Array)是按序排列的一组值.每个值的位置都有编号(从0开始) a、b、c就构成一个数...

  • 数组

    数组(Array) 数组(Array)是按序排列的一组值.每个值的位置都有编号(从0开始) a、b、c就构成一个数...

  • 桶排序

    原理:创建一个总个数的数组,将里面的元素都置为0,输入总个数范围内的数,将下标为该数的元素值+1,排序的时候判断数...

  • 2018-04-16数组排序

    数组排序 sort 按照数组值或元素从小到大排列数组 rsort 按照数组值或元素从大到小排列数组(以上两种排序...

  • 排序算法

    1、选择排序从数组第一个开始:i=0将数组中第 i 个当作最小,保存最小值的数组下标:minPos=i在剩余的数中...

  • 2164. 对奇偶下标分别排序

    给你一个下标从 0 开始的整数数组 nums 。根据下述规则重排 nums 中的值: 按 非递增 顺序排列 num...

  • 一些有用的JS 代码片段

    数组平均数 使用reduce()将每个值添加到累加器,初始值为0,总和除以数组长度。 注:reduce函数是求数组...

网友评论

      本文标题:面试题-数组排序。(将数组内0值数置于前部,非0值不改变排列顺序

      本文链接:https://www.haomeiwen.com/subject/uxfdlltx.html