Remove Duplicates from Sorted Array python問題解

1923 ワード

Remove Duplicates from Sorted Array python問題解
タイトルの説明:
Given a sorted array, remove the duplicates in place such that each element appear only once and return the new length.
Do not allocate extra space for another array, you must do this in place with constant memory.
For example, Given input array A = [1,1,2],
Your function should return length = 2, and A is now [1,2].
配列の配列を指定し、重複する要素を取り除き、同じ要素を一度だけ出現させ、新しい配列の長さを返す問題には、新しい配列空間を開くことが許されないという要求がある.
分析の構想この問題はC++の中の重み付けの操作を実現することに似ていて、大体の構想は1回の配列を遍歴してすべての繰り返し要素を取って1つ目を順番に配列の一番前に置いて、それから配列の前半を切り取って具体的に実現することができます:配列を遍歴して、startで出会った毎回1つ目の繰り返し要素に出会って調整する位置を記録します:ここでstartの初値は0ではありませんて、新しい配列の最初の要素は古い配列と同じなので、keyValueで遭遇した重複要素を記録し、配列を巡り、新しい重複要素に遭遇するたびにkeyValueを更新し、startが示す位置にその要素を配置し、startを後ろに移動します.最後に元の配列の前半に重複要素がない部分を新しい配列とし(タイトルは切り取らなければならないが,そうでなければWA)、このときstartの値が新しい配列長である.
Pythonコードは以下のように実現される.
class Solution:
    # @param a list of integers
    # @return an integer
    def removeDuplicates(self, A):
        if A==[]: return 0
        start=1;keyValue=A[0];length=len(A)
        for i in range(length):
            if A[i]!=keyValue:
                keyValue=A[i]
                A[start]=A[i]
                start+=1
        A=A[:start]
        return start