题目描述
给定一个数组,你需要删除其中重复出现的元素,只保留最后一次出现的重复元素,使得每个元素只出现一次,返回新数组,并保证新数组中的元素顺序与原数组一致。
示例
示例一
 Input: [2, 3, 6, 3, 5, 6, 7]
 Output: [2, 3, 5, 6, 7]
示例二:
 Input: [5, 9, 6, 2, 4, 6]
 Output: [5, 9, 2, 4, 6]
方法一
暴力法:创建一个空数组a,直接从后向前依次判断当前数是否在数组a中,若不在则加入数组a。
class Solution:
    def removeDuplicate(self, array):
        b = []
        for i in array[::-1]:
            if not i in b:
                b = [i] + b
        return b
方法二
字典法:创建字典a,依次遍历数组array,对于数组中的每个数,字典a只保留了其最后一次出现的位置下标,然后对字典中的每一项按字典值的大小进行排序。则此时排完序的字典的键即为所求数组。
    def removeDuplicate3(self, array):
        dic = dict()
        for i, item in enumerate(array):
            dic[item]=i
        a = sorted(dic.items(), key=lambda x: x[-1])
        b = []
        for x, _ in a:
            b.append(x)
        return b
方法三
字典法:按数组中值出现的先后顺序创建一个包含每个值位置的字典m,然后依次遍历数组进行判断。若当前数对应的值的长度为1,则加入数组中,不为1,则判断是否等于保存的最后一个位置的下标,等于则加入数组中。
class Solution:
    def removeDuplicate(self , array ):
        # write code here
        m = defaultdict(lambda: [])
        for i in range(len(array)):
            m[array[i]].append(i)
        res = []
        for i, num in enumerate(array):
            if len(m[num]) == 1:
                res.append(num)
            else:
                if i == m[num][-1]:
                    res.append(num)
        return res










