class Solution { /* 由于本题删除一个元素后,删除元素的右侧的全部元素将向左移动。 栈可以实现,而其他数据布局实现这个的时间复杂度太高,不保举使用 */ public int minDeletion(int[] nums) { int n = nums.length; if (n == 0) return 0; Deque<Integer> deque = new LinkedList<>(); deque.push(nums[0]); for (int i = 1; i < n; i++) { /* 对全部满足 i % 2 == 0 的下标 i ,nums != nums[i + 1] 均创建 */ //当栈的巨细为偶数时,阐明此时可以将数据直接添加到栈中 if (deque.size() % 2 == 0){ deque.push(nums); }else { int val = deque.peek(); //当为奇数时,要判断是否与栈顶的元素雷同,如果雷同,则不能添加 if (nums == val) continue; deque.push(nums); } } if (deque.size() % 2 == 0) return n - deque.size(); //当栈的巨细为奇数时,必要减去栈顶元素,所以删除的次数要加1 return n - deque.size() + 1; }}