Remove Duplicates from Sorted Array[python解]

2101 ワード

タイトル要求:Givna sorted array,remove the duplicates in place such that each element appearonly once and return the new length.
Do not allocate extra spacefor another array, you must do this in place with constant memory.
For example, Given input array nums =  [1,1,2] ,
Your function shouldreturnlength =  2 ,with the first twoelements of nums being  1  and  2  respectively. It doesn't matter what you leave beyond the newlength.
並べ替えられたリストを指定し、重複する要素を削除してリスト内の要素を一意にし、新しいリストの長さを返します.リストの追加作成は許可されていません.既存の入力リストで変更する必要があります.
この問題は自分が問題の意味を正確に理解していないため、多くの分かれ道を歩いて、自分の思考過程を書いてみんなと交流します.
タイトル解析:この問題はタイトルを見てもわかりますが、肝心なのは元のリストの処理と重複しないリストの長さ値を返す理解です.ここの「remove」は本当に元のリストから削除されたわけではありません.例の最後に「It doesn't matterwhat you leave beyond the new length」と言って、重複しない要素の長さを超えた部分は気にしないでください.また,問題は余分な空間を開くことが許されないため,重複要素を削除して元のリストの長さを変える方法で問題を解くことはできない.例では太字で説明していますが、重複しないリスト要素の長さ(例では重複しない要素が2つある)を返し、元のリストの前にあるリスト(つまりnumsの前の2つの要素が重複しない要素)を返します.
タイトル出力要求のまとめ:
1.結果は重複しない要素の個数lengthを返さなければならない.
2.元のリストnumsの要素が配列される前にlength個の要素が一意で昇順であるべきで、その後要素は要求しない.
解題構想:リストを遍歴し、nums[0]を基準とし、下付きポインタjを0とし、後の要素と比較して不等要素を1つずつ探し出し、不等要素を2番目の要素の位置nums[1]に置く.このときj+1、nums[1]を基準として次の不等要素を探し出し、このように不等要素をnumsリストの前の部分に置く.返されるj+1は、重複しないリスト長であり、結果として表示される重複しないリストは、nmsリストを遮断する前のj+1要素である.
コード実装:
class Solution(object):
    def removeDuplicates(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        #             ,             。                ,       ,       。
        if len(nums) == 0:
            return 0
        j = 0
        len_n = len(nums)
        for i in range(len_n):
            if nums[j] != nums[i]:
                nums[j + 1] = nums[i]
                j += 1
        return j + 1

だから、問題の意味を深く理解することが大切です!