【LeetCode】第36天 - 27. 移除元素

x33g5p2x  于2021-12-15 转载在 其他  
字(0.6k)|赞(0)|评价(0)|浏览(279)

题目描述

解题思路

题目要求只需要返回新数组的长度,所以我们可以考虑遍历数组,将发现的val值的元素与最后一个非val值的元素交换位置,并使用一个count记录非val值元素的个数,count值即为新数组的长度。
(详细见代码注释)

代码实现

  1. class Solution {
  2. //交换两个元素的位置
  3. public void sort(int[] nums, int left, int right){
  4. int temp = nums[left];
  5. nums[left] = nums[right];
  6. nums[right] = temp;
  7. }
  8. public int removeElement(int[] nums, int val) {
  9. int left = 0, right = nums.length - 1; //双指针分别指向数组的第一个元素和最后一个元素
  10. int count = 0; //记录新数组的长度
  11. while(left<=right){
  12. if(nums[left] == val){ //数组中存在想要移除的元素
  13. if(nums[right] != val){ //将该位置的元素与最后一个非val值的元素交换
  14. sort(nums,left,right);
  15. --right; //右指针左移
  16. }else{
  17. --right; //右指针左移找到最后一个非val值的元素
  18. continue;
  19. }
  20. }
  21. ++left; //非val值,左指针右移
  22. ++count; //新数组长度+1
  23. }
  24. return count;
  25. }
  26. }

相关文章