当前位置: 首页 > news >正文

LeetCode.3396.使数组元素互不相同所需的最少操作次数

3396. 使数组元素互不相同所需的最少操作次数

给你一个整数数组 nums,你需要确保数组中的元素 互不相同 。为此,你可以执行以下操作任意次:
从数组的开头移除 3 个元素。如果数组中元素少于 3 个,则移除所有剩余元素。
注意:空数组也视作为数组元素互不相同。返回使数组元素互不相同所需的 最少操作次数 。

示例 1:
输入: nums = [1,2,3,4,2,3,3,5,7]
输出: 2
解释:
第一次操作:移除前 3 个元素,数组变为 [4, 2, 3, 3, 5, 7]。
第二次操作:再次移除前 3 个元素,数组变为 [3, 5, 7],此时数组中的元素互不相同。
因此,答案是 2。

示例 2:
输入: nums = [4,5,6,4,4]
输出: 2
解释:
第一次操作:移除前 3 个元素,数组变为 [4, 4]。
第二次操作:移除所有剩余元素,数组变为空。
因此,答案是 2。

解题思路:
为了实现确保数组中的元素互不相同且计算最少操作次数的功能,可以采用贪心算法,从数组开头开始,不断检查是否有重复元素,若有则移除开头的 3 个元素(若元素不足 3 个则移除剩余元素),直至数组中元素互不相同。

// 判断数组中是否存在重复元素
int hasDuplicates(int* nums, int numsSize) {
    for (int i = 0; i < numsSize; i++) {
        for (int j = i + 1; j < numsSize; j++) {
            if (nums[i] == nums[j]) {
                return 1;
            }
        }
    }
    return 0;
}

// 计算使数组元素互不相同的最少操作次数
int minimumOperations(int* nums, int numsSize) {
    int operations = 0;
    while (hasDuplicates(nums, numsSize)) {
        if (numsSize >= 3) {
            // 移除开头的 3 个元素
            for (int i = 0; i < numsSize - 3; i++) {
                nums[i] = nums[i + 3];
            }
            numsSize -= 3;
        } else {
            // 若元素不足 3 个,移除剩余元素
            numsSize = 0;
        }
        operations++;
    }
    return operations;
}
  1. hasDuplicates 函数:该函数用于判断数组中是否存在重复元素。通过两层嵌套循环遍历数组,若找到两个相同的元素则返回 1,表示存在重复元素;若遍历完整个数组都未找到重复元素,则返回 0。
  2. minimumOperations 函数
    • 初始化操作次数 operations 为 0。
    • 使用 while 循环,只要数组中存在重复元素,就继续进行操作。
    • 若数组元素数量大于等于 3,则移除开头的 3 个元素,通过将后面的元素依次向前移动覆盖前面的元素实现。
    • 若数组元素数量小于 3,则将数组元素数量置为 0,表示移除所有剩余元素。
    • 每次操作后,操作次数 operations 加 1。
    • 当数组中不存在重复元素时,循环结束,返回操作次数。

相关文章:

  • ArkTS语言基础之函数
  • 从Excel到智能中枢:工单管理的MES系统进化论
  • 40、web前端开发之Vue3保姆教程(四)
  • tcp/ip攻击及防范
  • 7、nRF52xx蓝牙学习(nrf_gpiote.c库函数学习)
  • Spring 服务调用接口时,提示You should be redirected automatically to target URL:
  • 7.第二阶段x64游戏实战-分析人物属性
  • 软件需求分析习题汇编
  • PostGreSQL/openGauss表膨胀处理
  • Postman测试
  • [创业之路-364]:穿透表象:企业投资的深层逻辑与误区规避
  • 程序化广告行业(69/89):电商素材制作与展示策略解析
  • 程序化广告行业(71/89):ABTester与Tag Manager系统深度解析
  • Android学习总结之数据结构篇
  • <tauri><rust><GUI>基于rust和tauri,将tauri程序打包为window系统可安装的安装包(exe、msi)
  • TRUMPF PFG-RF RF Generators Operating instructions 操作使用说明
  • 【android bluetooth 框架分析 01】【关键线程 1】【关键线程介绍】
  • 2025 年江苏交安安全员考试:借助本地培训资源提升能力​
  • 集合计算高级函数
  • 图库项目开发 阶段二-图片优化
  • 英国有哪些做折扣的网站/整合营销什么意思
  • 一件代发供应链/网站优化的意义
  • 汽车电子商务网站建设规划书/做网页用什么软件好
  • 动态网站 教程/重庆高端品牌网站建设
  • wordpress 30分钟过期/深圳网站营销seo费用
  • 简单网站的设计与制作/优化网站的方法有哪些