zoukankan      html  css  js  c++  java
  • LeetCode(27) - Remove Element

      这道题要求的是在数组nums里面删除和给定的target相同的数字。如[1,3,2,3,2,4,5],target = 2。最后输出是[1,3,3,4,5]。

      首先,输出的顺序并不做要求,第二,数组也不是sorted。思路总体来说和LeetCode26是相同的,就是把target相同元素用其他数字代替,因为返回的是数组的长度,所以我们可以优先从数组后面不同的元素来替换。举个例子,[1,3,2,3,2,4,5],当index = 2时,元素最后一个是5 != 2,所以有[1,3,5,3,2,4,5],下一个2的话就用倒数第二个不一样的数字——4,所以结果是[1,3,5,3,4,4,5],最后输出为7-2=5,所以结果是[1,3,5,3,4](顺序无所谓)。

      所以我们由前到后遍历需要一个指针,后面指向待替换数字替换需要一个指针。所以这题是一个two pointer的题目。

      代码如下:

     1 public class Solution {
     2     public int removeElement(int[] nums, int val) {
     3         //遍历数字是否为val
     4         int head = 0;
     5         //指向数组底部待换数字。
     6         int tail = nums.length - 1;
     7         //重复个数
     8         int count = 0;
     9         //要用等号,防止数组长度为1,且value为val的情况。
    10         while (head <= tail) {
    11             //tail是val的情况,则tail需要往前挪
    12             if (nums[tail] == val) {
    13                 tail--;
    14                 count++;
    15             }
    16             //head遍历到val的时候,和tail交换,并更新count。
    17             else if (nums[head] == val) {
    18                 int temp = nums[tail];
    19                 nums[tail] = nums[head];
    20                 nums[head] = temp;
    21                 head++;
    22                 tail--;
    23                 count++;
    24             }
    25             //nums[head]不为count的情况。
    26             else {
    27                 head++;
    28             }
    29         }
    30         return nums.length - count;
    31     }
    32 }

      

  • 相关阅读:
    Java SSM 框架相关基础面试题
    JPanel JScrollPanel
    Spring MVC 的 Converter 和 Formatter
    JDesktopPane JInternalFrames
    Spring MVC 中的 forward redirect Flash属性
    Java Swing 中使用 EventQueue
    Java 中转换为String类型的四种方法
    Eclipse 安装使用 M2Eclipse 插件
    正则表达式
    Spring MVC 数据绑定和表单标签库
  • 原文地址:https://www.cnblogs.com/kepuCS/p/5282904.html
Copyright © 2011-2022 走看看