标签:方法 排序 删除元素 内存 执行 sort pre [] turn
题目:
给定数组和值,删除该值的所有实例并返回新的长度。
不要为另一个数组分配额外的空间,您必须使用常量内存来执行此操作。
元素的顺序可以改变。无论你离开新的长度什么都不重要。
示例:
给定输入数组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 }
标签:方法 排序 删除元素 内存 执行 sort pre [] turn
原文地址:http://www.cnblogs.com/xuzhiyuan/p/7662670.html