国家建设材料检测网站电商网页设计师
国家建设材料检测网站,电商网页设计师,网站建设系统平台,软件班级网站建设主题一、题目重述给定数组以及要移除的元素#xff0c;原地移除元素#xff0c;并且返回移除后的数组长度。二、题目分析对于这种题目#xff0c;我们一般想到的方法就是再开辟一个新的数组#xff0c;将不一样的元素移动过去。但是题目中要求#xff0c;必须原地移动#xf…一、题目重述给定数组以及要移除的元素原地移除元素并且返回移除后的数组长度。二、题目分析对于这种题目我们一般想到的方法就是再开辟一个新的数组将不一样的元素移动过去。但是题目中要求必须原地移动于是我们就不得不开始考虑怎么在不开辟新空间的情况下移除。这让我联想到有一摞书我们抽出我们要用的几本书剩下的书自动回落。所以我们也可以使用两个指针一个快指针用于在前面扫描移除的数一个慢指针用于将数压实。三、编程class Solution { public int removeElement(int[] nums, int val) { int j 0; for (int i 0;i nums.length;i){ if(nums[i] val){ continue; } nums[j] nums[i]; j; } return j; } }四、优化如果我们要追求极致的性能而对顺序并不关心的话我们可以左右安排一个指针当遇到检测的数就覆盖没有就往前走。public int removeElement(int[] nums, int val) { int left 0; int right nums.length - 1; while (left right) { if (nums[left] val) { nums[left] nums[right--]; } else { left; } } return left; }五、复杂度分析时间复杂度为O(n)因为是原地算法空间复杂度为O(1)优化前后复杂度不变。