zoukankan      html  css  js  c++  java
  • OJ练习12——T27 Remove Element

    删掉数组中与给出值相同的元素,返回新长度。

    “The order of elements can be changed. It doesn't matter what you leave beyond the new length.”(!这是重点提示!)

    【思路】

    题目有了第二句就很好办了,数组顺序可以改变,超过新长度的可以不计,那么就要两个标记(指针)ij。<-双指针思想

    i从前向后遍历,j从后向前,A[i]==elem时,swap(A[i], A[j])。

    【my code】

    int removeElement(int A[], int n, int elem) {
        int i,j;
        int length=n;
        for(i=0, j=n-1; i<=j; i++)
        {
            while(A[j]==elem&&j>=0){
                j--;
                length--;
            }
            if(A[i]==elem&&j>0){
                A[i]=A[j];
                A[j]=elem;
                j--;
                length--;
            }
        }
        return length;
    }

    【other code】

        int removeElement(int A[], int n, int elem) {
            // Start typing your C/C++ solution below
            // DO NOT write int main() function
            int start = 0;
            for(int i = 0; i < n; i++)
                if (elem != A[i])
                {
                    A[start++] = A[i];
                }
                
            return start;
        }

    【评价】

    别人的代码总是这么漂亮╮(╯﹏╰)╭

    总结:双指针思想。

    问题求相等/重复,就要反着思考,找到要保留的元素,从前到后按序重写,因为用来寻找的指针总是快于重写的指针,所以不会有漏掉要保留元素的情况。

    切记这种思路,要省很多事。

    【经验】

    leecode的测试结果如果是Runtime Error,一般是因为有特殊情况没考虑到。

    常常在输入参数非常小的情况。

  • 相关阅读:
    CF519E
    Visual Studio 2017更新内容记录
    MSSQL导入数据时,出现“无法截断表 因为表正由Foreign key引用”错误
    使用NeatUpload控件实现ASP.NET大文件上传
    jquery 图片无缝切换
    less 能加快css编写?
    jquery 分页控件(二)
    jquery 分页控件(一)
    jquery仿天猫商城左侧导航菜单
    jquery 图片放大
  • 原文地址:https://www.cnblogs.com/ketchups-notes/p/4422241.html
Copyright © 2011-2022 走看看