插: 前些天发现了一个巨牛的人工智能学习网站,普通易懂,风趣幽默,不由得分享一下给各人。点击跳转到网站。
坚持不懈,越积极越荣幸,各人一起学习鸭~~~
标题:
给你一个下标从 0 开始的整数数组 nums ,如果满足下述条件,则以为数组 nums 是一个 漂亮数组 :
nums.length 为偶数
对全部满足 i % 2 == 0 的下标 i ,nums != nums[i + 1] 均创建
留意,空数组同样以为是漂亮数组。
你可以从 nums 中删除恣意数目标元素。当你删除一个元素时,被删除元素右侧的全部元素将会向左移动一个单元以增补空缺,而左侧的元素将会保持 稳定 。
返回使 nums 变为漂亮数组所需删除的 最少 元素数目。
示例 1:
输入:nums = [1,1,2,3,5]
输出:1
表明:可以删除 nums[0] 或 nums[1] ,如许得到的 nums = [1,2,3,5] 是一个漂亮数组。可以证明,要想使 nums 变为漂亮数组,至少必要删除 1 个元素。
示例 2:
输入:nums = [1,1,2,2,3,3]
输出:2
表明:可以删除 nums[0] 和 nums[5] ,如许得到的 nums = [1,2,2,3] 是一个漂亮数组。可以证明,要想使 nums 变为漂亮数组,至少必要删除 2 个元素。
提示:
1 <= nums.length <= 10^5
0 <= nums <= 10^5
java代码:
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; }} |