My second page-数组删除 —— By Nicolas
這篇page要講的便是針對leetcode上面的27.移除元素,說實話啊,這一題小尼有點被惡心了,確實是小尼對循環的界限忘記了,所以前面提交了五次都是失敗了,但是最后還是找出了問題,這個問題小尼用的是暴力循環解法,就是兩層for循環解決問題,但是中間我出的問題就是我在第一次之后的開始循環的過程時,我把第一步的i沒有歸位,導致我每次繼續循環是不斷的在下一個元素進行,這使得通過的案例是有,但是就是走不完。先上一個我作物的代碼。
int lengh = nums.length; int val ; Scanner in = new Scanner(System.in); val = in.nextInt(); int s = lengh; for(int i = 0;i<lengh;i++){if(nums[i] == val){for(int j = i;j<s;j++){nums[j] = nums[j+1];}s = s - 1;} } return s;這種暴力的寫法比較多簡潔,不像有的暴力寫法那么繁瑣(這點有興趣的小伙伴可以學習),但是這里面出的問題就是我的i和lengh在不斷的循環的過程中它都是在增加或者不變的,在我遇到了一個指定元素之后,我的數組的元素的數量肯定是會減少的,而且那么就相當于我的數組收到了改變,那么我重遍歷的時候,我的i值肯定需要從0開始進行,但是我在開始的代碼沒有做這一步操作,導致不斷的通不過,這里也是在暴力法上面我覺得最難或者最重要的一點,一定要知道我的數組一旦發生了改變,那么我的遞歸的順序還是要從頭再來,那么一定要考慮的我的程序是否可以從頭開始,上面的代碼明顯做不到,接下來繼續拉一個正確的代碼
int lengh = nums.length; int val ; Scanner in = new Scanner(System.in); val = in.nextInt(); int s = lengh; for(int i = 0;i<lengh;i++){if(nums[i] == val){for(int j = i;j<s;j++){nums[j] = nums[j+1];}s = s - 1;}i--;lengh--; }以上代碼就也就加了兩條,這兩條也是在本題使用暴力解法的核心,就是需要注意到,我們的數組的遍歷需要重新開始以及我們的數組的長度發生了變化。
接下來說一說小尼今天學到的覆蓋的思想,這種方法的很多解法講它稱為指針解法,就是說定義兩個指針,一個快指針,一個滿指針,然后快指針不斷的往前遍歷我們的數組,滿指針就是一個一個的記錄,其實我覺得這是個覆蓋的思想,就好比,我不斷的派人去前方偵查敵情,然后我采取對應的措施,這里拉一下代碼
int lengh = nums.lengh;
int fast = 0;
int slow = 0;
for(fast;fast<lengh;fast++){
? ? ? ? if(nums[fast]? != target){
? ? ? ? ? ? ? ? nums[slow] = nums[fast];
????????????????slow++;
????????}
}
return slow;
這里就是拿fast不斷的往前探索,只要不是我的目標元素我就不斷的用slow重新重組我們的數組,這時候我們的數組就會被不斷的更新,最后就形成了一個新的數組,這跟我們的上面的暴力解法是完全不同的兩個東西,暴力解法就是在破壞數組,進行把中間目標元素拿掉用后面的元素不斷的覆蓋,而指針法就是不斷的重組,這就是今天我想分享的數組重組。
總結
以上是生活随笔為你收集整理的My second page-数组删除 —— By Nicolas的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 3G模块PPPD拨号流程分析
- 下一篇: mysql 将年月日转换成年_SQL数据
