zoukankan      html  css  js  c++  java
  • 27.删除元素(27. Remove Element)

    题目:

    给定数组和值,删除该值的所有实例并返回新的长度。

    不要为另一个数组分配额外的空间,您必须使用常量内存来执行此操作。

    元素的顺序可以改变。无论你离开新的长度什么都不重要。

    示例:
    给定输入数组nums = [3,2,2,3]val =3

    你的函数应该返回length = 2,num的前两个元素为2。

    方法一:

    思路:

    (1)定义j=0;用来记录数组中不等于val的元素的个数;

    (2)从头开始遍历数组(i=0),若数组中元素与val不相等(即nums[i]!=val)则将nums[i]赋给nums[j],然后将j+1;然后执行下一次循环;若数组中元素与val值相等即(nums[i]!=val),则执行下一次循环;z直到循环执行结束;

      (3)最后返回j;

    代码:

     1 class Solution {
     2     public int removeElement(int[] nums, int val) {
     3         
     4         int j=0;
     5         for(int i=0;i<nums.length;i++){
     6             
     7             if(nums[i]!=val){
     8                 
     9                 nums[j++]=nums[i];
    10                 
    11             }
    12             
    13         }
    14         
    15         return j;
    16     }
    17     
    18 }

    方法二:

    思路:

    (1)首先将数组进行排序;

    (2)定义result=0;用来记录数组中与val不相等的个数;

    (3)从头开始遍历数组若数组中元素与val不相等则将result+1;若数组中存在与val值相等的元素则在其后找到第一个与val不相等的元素的下标赋给i;从i开始依次将数组中剩余元素值赋给resulr;然后将result+1;

    (4)最后返回result;

    代码:

     1 class Solution {
     2     public int removeElement(int[] nums, int val) {
     3         
     4         Arrays.sort(nums);
     5         
     6         int result=0;//未与k重复元素的下标
     7             
     8         for(int i=0;i<nums.length;i++){
     9 
    10             if(nums[i]==val){
    11                 
    12                 //在数组中i之后找到第一个与k不相等的元素的下标
    13                 i=noEqualsK(nums,i+1,val);
    14                 for(;i<nums.length;i++){
    15                     
    16                     nums[result++]=nums[i];
    17                     
    18                 }
    19                 
    20             }else{
    21                 
    22                 result++;
    23                 
    24             }
    25         }
    26         
    27         return result;
    28 
    29     }
    30     //返回数组中i之后找到第一个与k不相等的元素的下标
    31     public int noEqualsK(int[] nums,int i,int val){
    32         
    33         for(;i<nums.length;i++){
    34 
    35             if(nums[i]!=val){
    36                 
    37                 return i;
    38                 
    39             }
    40         }
    41         
    42         return nums.length;
    43     }
    44     
    45 }
  • 相关阅读:
    LeetCode 811. Subdomain Visit Count (子域名访问计数)
    LeetCode 884. Uncommon Words from Two Sentences (两句话中的不常见单词)
    LeetCode 939. Minimum Area Rectangle (最小面积矩形)
    LeetCode 781. Rabbits in Forest (森林中的兔子)
    LeetCode 739. Daily Temperatures (每日温度)
    三种方式实现按钮的点击事件
    239. Sliding Window Maximum
    14.TCP的坚持定时器和保活定时器
    13.TCP的超时与重传
    12.TCP的成块数据流
  • 原文地址:https://www.cnblogs.com/xuzhiyuan/p/7662670.html
Copyright © 2011-2022 走看看