力扣每日一题-美化数组的最少删除数-2023.11.21

    力扣每日一题:美化数组的最少删除数

开篇

  今天的力扣每日一题居然写出来了,好开心,迫不及待地把题目分享出来,希望你也能把它狠狠拿下。

题目链接: 2216.美化数组的最少删除数

题目描述

在这里插入图片描述

代码思路

  创建一个list集合来保存数组,方便删除操作。在集合中根据题目要求,对偶数下标的元素进行判断,然后删除不符合要求的元素,并统计删除次数。最后返回删除次数即可。

代码纯享版

class Solution {
    public int minDeletion(int[] nums) {
        int sum = 0;
        List<Integer> list = new ArrayList<>();
        for(int num: nums) list.add(num);
        for(int i = 0; i < list.size() - 1; i++){
            if(i % 2 == 0 && list.get(i).equals(list.get(i + 1))){
                list.remove(i);
                i--;
                sum++;
            }
        }
        if(list.size() % 2 != 0) sum++;
        return sum;
    }
}

代码逐行解析版

class Solution {
    public int minDeletion(int[] nums) {
        int sum = 0;//统计删除数量
        List<Integer> list = new ArrayList<>(); //创建list集合,方便删除操作
        for(int num: nums) list.add(num); //将数组元素全部添加到list中,用list来进行下面操作
        for(int i = 0; i < list.size() - 1; i++){ //因为下面会比较到i+1下标,所以这里是i < list.size() - 1
            if(i % 2 == 0 && list.get(i).equals(list.get(i + 1))){  //寻找需要被删除的元素
                list.remove(i); //删除该元素
                i--; //删掉一个数后,会左移1位
                sum++;//删除数量加1
            }
        }
        if(list.size() % 2 != 0) sum++; //如果数组长度不是偶数,要再删掉一个
        return sum;//返回删除的数量
    }

其它解法

  只能说大佬的代码总是优雅整洁又高效的,这个for循环中的i=i+2简直是让我醍醐灌顶

// 贪心,总是优先删除数组靠前的元素
class Solution {
    public int minDeletion(int[] nums) {
        int n = nums.length, res = 0;
        // 进入的i总是作为奇数位
        for(int i = 1; i<n; i = i+2){
            if(nums[i] == nums[i-1]){
                res++;
                i--;
            }
        }
        return (n - res) % 2 == 0 ? res : res + 1;
    }

结语

  如果对这道题的分享对您有帮助,点个关注,我会每天分享力扣题的讲解,与大伙儿一起向前迈进。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值