给定一个数组,你需要删除其中重复出现的元素,只保留最后一次出现的重复元素,使得每个元素只出现一次,返回新数组,并保证新数组中的元素顺序与原数组一致。
# # 删除重复元素 # @param array int整型一维数组 # @return int整型一维数组 # from collections import defaultdict 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不保留所有位置,仅保留最后一个位置也可以,能够节省一点空间
import java.util.*;
public class Solution {
/**
* 删除重复元素
* @param array int整型一维数组
* @return int整型一维数组
*/
public int[] removeDuplicate (int[] array) {
// write code here
HashMap<Integer, Integer> map = new HashMap<>();
for(int i = 0; i < array.length; i++){
map.put(array[i], i);
}
int[] res = new int[map.size()];
int index = 0;
for(int i = 0; i < array.length; i++){
if(map.get(array[i]) == i){
res[index++] = array[i];
}
}
return res;
}
} 先反着存入LinkedHashSet,再反着存入结果数组
/**
* 删除重复元素
* @param array int整型一维数组
* @return int整型一维数组
*/
public static int[] removeDuplicate ( int[] array){
// write code here
LinkedHashSet<Integer> linkedHashSet=new LinkedHashSet<Integer>();
for (int i = array.length-1; i>=0; i--) {
linkedHashSet.add(array[i]);
}
int newArr[] = new int[linkedHashSet.size()];
Iterator iterator=linkedHashSet.iterator();
int i=linkedHashSet.size()-1;
while (iterator.hasNext()){
newArr[i]= (int) iterator.next();
i--;
}
return newArr;
} import java.util.*;
public class Solution {
/**
* 删除重复元素
* @param array int整型一维数组
* @return int整型一维数组
*/
public int[] removeDuplicate (int[] array) {
// write code here
int len = array.length;
if(len==0||len==1) return array;
int j=len-1;
Set<Integer> set = new HashSet<>();
for(int i=len-1;i>=0;--i){
if(set.contains(array[i])){
continue;
}else{
set.add(array[i]);
array[j--]=array[i];
}
}
return Arrays.copyOfRange(array,++j,len);
}
} #
# 删除重复元素
# @param array int整型一维数组
# @return int整型一维数组
#
class Solution:
def removeDuplicate(self , array ):
dic = {}
for i in array:
if i in dic:
dic[i] += 1
else:
dic[i] = 1
res = []
for i in array:
if dic[i] == 1:
res.append(i)
else:
dic[i] -= 1
return res import java.util.*;
public class Solution {
/**
* 删除重复元素
* @param array int整型一维数组
* @return int整型一维数组
*/
public int[] removeDuplicate (int[] array) {
// write code here
int n = array.length;
Set<Integer> set = new HashSet<>();
int k = n-1;
for(int i = n-1; i >=0; i--){
if(!set.add(array[i]))continue;
array[k--] = array[i];
}
return Arrays.copyOfRange(array, k+1, n);
}
} public static Integer[] removeDuplication(int[] goal){
Integer[] returnInt = {};
// List<Integer> list = new ArrayList<>();
List<Integer> list = new LinkedList<>();
for (int i = 0; i < goal.length; i++) {
list.add(goal[i]);
}
for (int i = 1; i < goal.length; i++) {
for (int j = 0;j < i;j++){
if (goal[i] == goal[j]) {
list.remove(list.indexOf(goal[j]));
}
}
}
returnInt = Arrays.copyOfRange(list.toArray(),0,list.size(),Integer[].class);
return returnInt;
} class Solution {
public:
/**
* 删除重复元素
* @param array int整型一维数组
* @param arrayLen int array数组长度
* @return int整型vector
*/
vector<int> removeDuplicate(int* array, int arrayLen) {
vector<int> ans;
unordered_set<int> set;
for(int i = arrayLen - 1; i >= 0; i--)
{
if(set.find(array[i]) == set.end())
{
ans.push_back(array[i]);
set.insert(array[i]);
}
}
reverse(ans.begin(), ans.end());
return ans;
}
}; //C++解法,使用哈希表
class Solution {
public:
/**
* 删除重复元素
* @param array int整型一维数组
* @param arrayLen int array数组长度
* @return int整型vector
*/
vector<int> removeDuplicate(int* array, int arrayLen) {
// write code here
unordered_map<int,int>hp;
vector<int> res;
if(arrayLen==0) return res;
else{
for(int i=0;i<arrayLen;i++) hp[array[i]]=1;
for(int i=arrayLen-1;i>=0;i--){
if(hp[array[i]]==1){
res.push_back(array[i]);
hp[array[i]]=0;
}
}
reverse(res.begin(),res.end());
}
return res;
}
}; public int[] removeDuplicate (int[] array) { LinkedHashSet<Integer> set = new LinkedHashSet<>(); for (int i = array.length-1; i >=0; i--) { set.add(array[i]); } int[] ints = new int[set.size()]; int index=set.size()-1; for (Integer integer : set) { ints[index--]=integer; } return ints;}
# # 删除重复元素 # @param array int整型一维数组 # @return int整型一维数组 # class Solution: def removeDuplicate(self , array ): # write code here c = set() i = len(array) - 1 while i >= 0: if array[i] not in c: c.add(array[i]) else: array.pop(i) i -= 1 return array