【算法题】2216. 美化数组的最少删除数

分享
手机游戏开发者 2024-10-6 19:18:53 145 0 来自 中国
插: 前些天发现了一个巨牛的人工智能学习网站,普通易懂,风趣幽默,不由得分享一下给各人。点击跳转到网站。
坚持不懈,越积极越荣幸,各人一起学习鸭~~~
标题:

给你一个下标从 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;    }}
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2024-11-23 16:15, Processed in 0.149913 second(s), 33 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表