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 }
原文地址:https://www.cnblogs.com/xuzhiyuan/p/7662670.html