package com.arrays.java; public class two { //方法一:暴力解法 使用双层for循环 public int removeElement(int[] nums, int val) { int size = nums.length; for(int i = 0; i < size; i++) { if(nums[i] == val) { //后面元素向前移动 for(int j = i+1;j < size;j++) { nums[j-1] = nums[j]; } i--;//因为移动了元素,为了下一轮i的指向不变 size--; } } return size; } //方法二:双指针 通过一个快指针和慢指针在一个for循环下完成两个for循环的工作 public int removeElement1(int[] nums, int val) {//例如nums=[1,2,3,3,4,5,3,6] int slowIndex = 0; for(int fastIndex = 0; fastIndex < nums.length; fastIndex++) { //其实可以把快慢指针想象成指向两个不同数组的指针(实际指向同一个数组) //慢指针指向一个可以变长的空数组,该数组用来追加非val数 //快指针用来遍历nums数组,找到非val数,并添加到慢指针的数组 if(nums[fastIndex] != val) { nums[slowIndex] = nums[fastIndex]; slowIndex++; } } return slowIndex; } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)