移除元素
题目形容:给你一个数组 nums 和一个值 val,你须要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。
不要应用额定的数组空间,你必须仅应用 O(1) 额定空间并 原地 批改输出数组。
元素的程序能够扭转。你不须要思考数组中超出新长度前面的元素。
示例阐明请见 LeetCode 官网。
起源:力扣(LeetCode)
链接:https://leetcode-cn.com/probl…
著作权归领扣网络所有。商业转载请分割官网受权,非商业转载请注明出处。
解法一:替换地位
- 首先,如果数组为空或者数组的长度为 0,间接返回 0;
而后,如果数组不为空,遍历数组,count 记录和 val 值不雷同的数目(也就是最初的返回值),index 示意从 0 开始遍历,reverseCount 示意替换数字的次数,具体遍历过程如下:
- 当 index 对应的值不等于 val 时,count 加 1,并且 index 加 1 也就是往后移一位;
- 当 index 对应的值等于 val 时,判断 index 是否前面可遍历的位数,如果是,则将 index 和可遍历的最初一位替换数字,并且 reverseCount+1,而后持续遍历;如果不是,则没有可替换的地位,即曾经遍历实现。返回 count 值。
public class LeetCode_027 {public static int removeElement(int[] nums, int val) {if (nums == null || nums.length == 0) {return 0;}
int count = 0;
int index = 0;
int reverseCount = 0;
while (index < nums.length - reverseCount) {if (nums[index] != val) {
index++;
count++;
} else {if (index < (nums.length - 1 - reverseCount)) {int temp = nums[index];
nums[index] = nums[nums.length - 1 - reverseCount];
nums[nums.length - 1 - reverseCount] = temp;
reverseCount++;
} else {break;}
}
}
return count;
}
public static void main(String[] args) {int[] nums = new int[]{1};
System.out.println(removeElement(nums, 1));
System.out.println();
for (int num : nums) {System.out.print(num + " ");
}
}
}
【每日寄语】 昨天是历史,今天是谜团,只有明天是天赐的礼物。