算法描述:
给定一个数组int arr[], 相邻元素去重,同时去重后得到的新数组保证相邻元素不重复。
例子:
int arr[] = new int[] {1,2,3,6,6,6,3,5,7,7,8}
去重后结果:[1, 2, 5, 8 ]
这里给一个时间复杂度o(n) 空间复杂度o(n)的算法:
采用java中的stack作为临时存储空间,外加一个临时变量 isrepeat(主要为了处理奇数个重复的问题)
-
static integer[] unique(integer arr[]) {
-
if(arr == null || arr.length < 2) return arr;
-
stack<integer> stack = new stack<>();
-
boolean isrepeat = false;
-
stack.push(arr[0]);
-
for (int i = 1;i< arr.length; i) {
-
if(!stack.isempty()) {
-
if(stack.peek() == arr[i]) {
-
isrepeat = true;
-
continue;
-
}else {
-
if(isrepeat) {
-
stack.pop();
-
if(stack.peek() == arr[i]) {
-
isrepeat = true;
-
continue;
-
}else {
-
stack.push(arr[i]);
-
isrepeat = false;
-
}
-
}else {
-
stack.push(arr[i]);
-
}
-
}
-
}else{
-
stack.push(arr[i]);
-
isrepeat = false;
-
}
-
}
-
return stack.toarray(new integer[0]);
-
}
阅读(807) | 评论(0) | 转发(0) |