zoukankan      html  css  js  c++  java
  • 删除元素(LintCode) .

    删除元素

    给定一个数组和一个值,在原地删除与值相同的数字,返回新数组的长度。

    元素的顺序可以改变,并且对新的数组不会有影响。

    样例

    给出一个数组 [0,4,4,0,0,2,4,4],和值 4

    返回 4 并且4个元素的新数组为[0,0,0,2]

    思路就是把除删除元素外的元素移到最左边,r是最右端非被删除元素,可以在一开始就找到最右端非被删除元素。用i遍历数组,找到最左端被删除元素,把r所指元素赋到i位置即可。代码里我是先找最左端被删除元素,然后再找最右端非被删除元素。时间复杂度是相同的。

     1 public class Solution {
     2     /** 
     3      *@param A: A list of integers
     4      *@param elem: An integer
     5      *@return: The new length after remove
     6      */
     7     public int removeElement(int[] A, int elem) {
     8         int r = A.length - 1;
     9         if(r < 0) return 0;
    10         int i = 0;
    11         
    12         while(r > i) {
    13             if(A[i] == elem) {
    14                 while(A[r] == elem && r > 0) r--;
    15                 if(r > i) {
    16                     A[i] = A[r];
    17                     r--;
    18                 }
    19             }
    20             i++;
    21         }
    22         
    23         if(A[r] == elem) r--;
    24         
    25         return r + 1;
    26     }
    27 }
    View Code
  • 相关阅读:
    &与&&的区别
    x^y=(x&~y)|(~x&y)证明
    a、b交换与比较
    x+y = ((x&y)<<1) + (x^y) 证明
    (x&y) + ((x^y)>>1)即x和y的算数平均值
    默认参数提升
    类型转换
    闲扯原码,补码和反码(转)
    C/C++中float和double的存储结构
    led设备驱动(s3c_led.c)
  • 原文地址:https://www.cnblogs.com/FJH1994/p/5022094.html
Copyright © 2011-2022 走看看