zoukankan      html  css  js  c++  java
  • LeetCode OJ 27. Remove Element

    Given an array and a value, remove all instances of that value in place and return the new length.

    Do not allocate extra space for another array, you must do this in place with constant memory.

    The order of elements can be changed. It doesn't matter what you leave beyond the new length.

    Example:
    Given input array nums = [3,2,2,3]val = 3

    Your function should return length = 2, with the first two elements of nums being 2.

    Hint:

    1. Try two pointers.
    2. Did you use the property of "the order of elements can be changed"?
    3. What happens when the elements to remove are rare?

    Subscribe to see which companies asked this question

    【思路】

    由于返回是数组的数字顺序可以改变,我们可以从后往前遍历。如果遇到的值和给定的val相同,则数组长度len-1,指针向前移动。如果遇到的值和val不同,则向前找到第一个和val值相同的数组元素,然后把这个元素和最后的元素交换位置。len = len - 1,尾指针继续向前移动。

    举个例子,初始数组[3,2,2,3,4,3,5,5,3] val = 3

    1. 尾指针 notval = len - 1 = 8,此时nums[notval] = 3,则指针向前移动,len - 1,数组变为[3,2,2,3,4,3,5,5]

    2. notval = 7,nums[7] = 5 != 3,向前找到第一个等于3的数组元素,nums[5] = 3,此时令nums[5] = nums[7],len - 1,数组变为[3,2,2,3,4,5,5]

    3. 重复上述过程,直到向前找不到值为val的数组元素,则可以返回[5,2,2,5,4,5]。

    代码如下:

     1 public class Solution {
     2     public int removeElement(int[] nums, int val) {
     3         if(nums==null || nums.length==0) return 0;
     4         int len = nums.length;
     5         int notval, isval;
     6         for(notval = len - 1; notval >=0; notval--){
     7             if(nums[notval] == val) len = len - 1;
     8             else{
     9                 for(isval = notval - 1; isval >= 0; isval--)
    10                     if(nums[isval] == val) break;
    11                 if(isval < 0) return len;
    12                 else{
    13                     nums[isval] = nums[notval];
    14                     len = len - 1;
    15                 }
    16             }
    17         }
    18         return len;
    19     }
    20 }
  • 相关阅读:
    如何在IntelJ下用Maven创建一个Web项目
    Sublime快捷键大全
    Oracle常用数据字典
    POI 操作Excel疑难点笔记
    Oracle常见错误集锦
    SQL注入测试平台 SQLol -6.CHALLENGES挑战
    SQL注入测试平台 SQLol -5.DELETE注入测试
    SQL注入测试平台 SQLol -4.UPDATE注入测试
    SQL注入测试平台 SQLol -3.INSERT注入测试
    SQL注入测试平台 SQLol -2.SELECT注入测试
  • 原文地址:https://www.cnblogs.com/liujinhong/p/5510709.html
Copyright © 2011-2022 走看看