• 力扣每日一题-美化数组的最少删除数-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;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    代码逐行解析版

    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;//返回删除的数量
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    其它解法

      只能说大佬的代码总是优雅整洁又高效的,这个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;
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    结语

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

  • 相关阅读:
    【Matplotlib绘制图像大全】(十九):Matplotlib绘制等高线
    【微信小程序】自定义组件(二)
    JSON转换
    绕过防盗链的几种方式
    Net 如何获取私有属性
    华为OD:VLAN资源池
    大模型推理框架概述
    (51单片机)第十一章-串行口应用提高
    javaweb中的转发与重定向
    前端面试之事件循环
  • 原文地址:https://blog.csdn.net/m0_73709096/article/details/134523085