next数组_【阿里面试热身题】数组去重(动画展示)
生活随笔
收集整理的這篇文章主要介紹了
next数组_【阿里面试热身题】数组去重(动画展示)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
今天這道雙指針題目特征非常明顯,就是數據挪移。這類問題,通常需要一個指針掃描全局,確定哪個元素要被挪移,另一個指針用來維護能夠接納元素的地址。
1 舉個栗子
給定一個升序排列的數組,請將其中重復的字符移除。你不能使用額外的空間。在處理完畢后,返回去重后的數組長度
- 例子1
輸入:[2, 3, 3, 3, 6, 9, 9]
輸出:4
解釋:去重后數組的元素是[2, 3, 6, 9]
- 例子2 輸入:[2, 2, 2, 11]
輸出:2
解釋:去重后數組的元素是[2, 11]
2 問題分析
這個問題中,數組是有序的。我們可以用一個指針順序掃描整個數組,找出所有的非重復數字。判斷的標準非常簡單,當該元素與上一個非重復元素的值不同時,該元素就是一個新的數字。
那,將這個元素放在哪里呢?因為該元素右邊還需要進行掃描,所以,我們只能將這些非重復的元素放到數組的左端,這樣,我們就需要另一個指針來記錄可用來存放元素的位置。并且每放一個元素,就需要移動一下該指針。
3 動畫展示
下面的視頻可以幫助理解。
原地址:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/solution/shi-ping-dong-hua-jie-xi-bao-ni-dong-by-novice2mas/
4 代碼實現
def remove_duplicates(arr):# 用來記錄放置非重復元素的位置
# 0位置上認為是已經放好的
next_non_duplicate = 1
i = 1
while(i < len(arr)):
if arr[next_non_duplicate - 1] != arr[i]:
arr[next_non_duplicate] = arr[i]
next_non_duplicate += 1
i += 1
return next_non_duplicate
總結
以上是生活随笔為你收集整理的next数组_【阿里面试热身题】数组去重(动画展示)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vc 文本框 只显示下划线_Word手动
- 下一篇: pythonalert弹窗_python