中國自適應(yīng)網(wǎng)站建設(shè)模板網(wǎng)站好還是自助建站好
對于移除元素這道題來講,我首先想到的還是雙指針,根據(jù)題目要求我們需要在給定的一組數(shù)組中找出與目標(biāo)值不同的元素數(shù)量并且將與目標(biāo)值不同的元素全部移至數(shù)組左邊右邊則不需關(guān)注數(shù)組元素的大小,我們利用兩個指針一個指向數(shù)組首部位置(左指針)一個指向末端位置(右指針),如果首部位置所指元素與目標(biāo)值相同則將右指針?biāo)冈貙ψ笾羔標(biāo)冈剡M(jìn)行覆蓋接著右指針向左移動如果不同則左指針向右移動重復(fù)上述步驟即可直至左指針越過右指針循環(huán)結(jié)束我們直接返回左指針下標(biāo)即可(即為與目標(biāo)值不同的元素數(shù)量總和)
這種方法比較正式的稱呼是相向雙指針法
class Solution {public int removeElement(int[] nums, int val) {int left=0;int right=nums.length-1;int sum=0;while(left<=right){if(nums[left]==val){nums[left]=nums[right];right--;} else{sum++;left++;} }return sum;}
}
除此之外還有快慢指針法可以解決這個問題
快慢指針法
通過快指針來尋找與目標(biāo)值不同的元素
通過慢指針來更新數(shù)組即可
class Solution {public int removeElement(int[] nums, int val) {int fastIndex=0;int slowIndex=0;while(fastIndex<=nums.length-1){if(nums[fastIndex]==val){fastIndex++;}else{nums[slowIndex]=nums[fastIndex];slowIndex++;fastIndex++;}}return slowIndex;
}
}