leecode每日一题 1054 距离相等的条形码

news2025/1/18 16:48:27

题目描述

在一个仓库里,有一排条形码,其中第 i 个条形码为 barcodes[i]。请你重新排列这些条形码,使其中任意两个相邻的条形码不能相等。 你可以返回任何满足该要求的答案,此题保证存在答案。

示例 1:

输入:barcodes = [1,1,1,2,2,2]
输出:[2,1,2,1,2,1]

示例 2:

输入:barcodes = [1,1,1,1,2,2,3,3]
输出:[1,3,1,3,2,1,2,1]

题解

官网题解是让用大根堆,但是我觉得有点过于复杂。

我得思路是利用插空法,只要我做一个遍历,能让数组里面没有需要插空的位置,那么这个就算弄好了。

1. 先统计这个数组里面,需要插空的空位。当两个位置连续的元素值一样,那么就认为需要插入和这两个元素不同德元素,才能保证相同数字不连续。

2.我就以这个数值作为判断的依据,当这个空位值为0,我就认为数组中已经不存在相同且连续的数字。

3. 每次我都会从数组尾部拿出一个元素,把他放到该放的位置,直到空位置为0。

4. 什么情况下,这个空位置会被减少呢,有且只有两种情况:

  • 数组尾部的的元素,和它前一个元素相同,那么他们之间有一个空位要填,如果把尾部的元素拿走,填到其他地方,就破坏了这个空位,那么就可以减少一个空位。
  • 数组尾部的的元素,放到一个与它相邻元素的值都不一样的位置,如果这两个相邻元素是一样的,那么相当于这个尾部元素就把一个空位给填了,那么就可以减少一个空位。
class Solution {
    public int[] rearrangeBarcodes(int[] barcodes) {
        int length = barcodes.length;
        if (length <= 2) {
            return barcodes;
        }

        int locations = 0;
        for (int i = 0; i < barcodes.length - 1; i++) { //1.统计空位
            if (barcodes[i] == barcodes[i + 1]) {
                locations++;
            }
        }

        while (locations > 0) { //2.以这个空位作为判断,当空位都填满(即为0),就说明数组处理好了。
            int tail = barcodes[length - 1]; //3. 每次都会从数组尾部拿出一个元素,把他放到该放的位置。
            int l = 0;
            while (l < length) {
                if ((l == 0 && barcodes[l] != tail)
                        || barcodes[l] != tail && barcodes[l - 1] != tail) {
                    if (barcodes[length - 2] == tail) { //4.1 尾部元素和它前一个元素相同,移走尾部元素,也就破环了一个空位,所以可以减1
                        locations--; 
                    }

                    if (l != 0 &&  barcodes[l] == barcodes[l - 1]){ //4.2 放入的位置,相邻元素相同,说明填充了一个空位,所以也可以减1
                        locations--;
                    }

                    System.arraycopy(barcodes, l, barcodes, l + 1, length - l - 1);
                    barcodes[l] = tail;
                    break;
                } else {
                    l++;
                }
            }
        }

        return barcodes;

    }
}

提交结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/532574.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JS逆向 -- 分析某站aid、cid、w_rid和sid的加密过程

接上节课内容 JS逆向 -- 分析某站buvid3和_uuid的加密过程 JS逆向 -- 分析某站b_lsid值加密过程 一、清除cookie信息&#xff0c;刷新网页&#xff0c;ctrlf搜索sid&#xff0c;这样找到的数据是在url里或者响应信息里面&#xff0c;全局搜索找到的一般都是在js里面的数据&a…

ChatGPT生成Excel统计公式——检查数据是否满足要求

背景需求 有一张表格如下&#xff0c;需要统计每个用户是否在第一到第三周中&#xff0c;每周发文数量都大于等于两篇&#xff0c;是的话给出Yes&#xff0c;否的话给出No 操作流程 给出描述&#xff0c;让ChatGPT生成对应的公式&#xff0c;条件如下&#xff1a; 在excel中…

【保护和自动控制 JDX-1000信号继电器 机械保持、电复归 JOSEF约瑟】

名称&#xff1a;信号继电器&#xff1b;型号&#xff1a;JDX-1000系列&#xff1b;品牌&#xff1a;JOSEF约瑟&#xff1b;额定电压&#xff1a;110、220VDC/AC&#xff1b;起动电流&#xff1a;3mA&#xff1b;稳定电流&#xff1a;2A&#xff1b;功率消耗&#xff1a;不大于…

TH2822D手持式 LCR数字电桥产品资料

TH2822D是一款手持式LCR数字电桥&#xff0c;可测量电容、电感和电阻&#xff0c;具有高精度、高灵敏度、低功耗和易于携带等特点。TH2822D适用于生产、现场维修和科研等多个领域。 TH2822D手持式LCR数字电桥的主要特点如下&#xff1a;1. 标准源四终点测量方法&#xff0c;准…

【优秀!44个HCIA-Datacom知识点总结】

1、IPV4地址的组成部分&#xff1f;IP地址长度&#xff1f;表达形式&#xff1f;如何区分网络位和主机位&#xff1f; 组成部分&#xff1a;网络位主机位 IP地址长度&#xff1a;32bit 表达形式&#xff1a;点分十进制 区分&#xff1a;子网掩码区分&#xff0c;为1是网络位&am…

以云原生推动代际跃升,2023通明湖论坛云原生分论坛召开

5月12日&#xff0c;由神州数码主办&#xff0c;北京经开区国家信创园、中关村云计算产业联盟协办的2023通明湖论坛-云原生分论坛在京召开。本次论坛&#xff0c;以“抓住云原生机遇&#xff0c;推动我国信息基础设施技术代际跃升”为主题&#xff0c;聚焦以云原生为核心引领的…

vue2和elementUI 打造落日余晖登录页和滑块校验

文章目录 前言1 项目搭建2 依赖引入3 项目调整①vue-router② App.vue③ main.js 4 写登录页5 写滑块校验6 源码下载7 问题解决①项目一直报错② 背景图存在白边 前言 标题很夸张&#xff0c;实则是AI的功能&#xff0c;今天咱也搞一个登录页&#xff0c;其实满简单的一个东东…

Gigabayte-Z87-DS3H i3 4130电脑 Hackintosh 黑苹果efi引导文件

原文来源于黑果魏叔官网&#xff0c;转载需注明出处。&#xff08;下载请直接百度黑果魏叔&#xff09; 硬件型号驱动情况 主板Gigabayte-Z87-DS3H 处理器英特尔酷睿i3 4130 Haswell已驱动 内存4x4GB DDR3/1600Mhz金士顿已驱动 硬盘SSD 480GB PNY CS900已驱动 显卡英特尔高…

想学透OSPF,先搞懂这6个技术点再说

大家好&#xff0c;我是老杨。 OSPF&#xff0c;这玩意儿作为目前主流的IGP协议&#xff0c;主要是为了解决RIP的三大问题而出现的。 应用面非常广&#xff0c;认可度也高&#xff0c;毕竟的确是好用的。 也有很多正在学习的小友想找我讲讲&#xff0c;OSPF该怎么学。 基础的…

Beerus:基于Helios light client的Starknet Stateless Client

1. 引言 前序博客&#xff1a; Helios——a16z crypto构建的去中心化以太坊轻节点 Beerus为基于Helios light client构建的Starknet Stateless Client&#xff0c;开源代码实现见&#xff1a; https://github.com/keep-starknet-strange/beerus&#xff08;Rust&#xff09…

食饮品牌如何用Social Power抓住消费者心智?

2023 Foodaily创博会 2023.05.14-2023.05.16 数说故事将深度参与Foodaily创博会&#xff08;第八届Foodaily FBIC全球食品饮料创新大会&#xff09;&#xff0c;和食饮品牌一起玩转Social Power&#xff0c;抓住消费者心智&#xff0c;用一种很新的方法营销与创新。 作为食饮…

Qt5.15.2替换mingw32-make.exe为emmake

qtcreator对qt程序的编译过程是先“qmake” &#xff0c;然后“构建&#xff08;等价于make&#xff09;”。 qtcreator右键点击项目 出现的 “执行qmake”和“构建” 两个选项其实就是运行 项目-》build->构建步骤 中的“qmake”和“make”步骤所对应的命令行命令。 从项目…

类和对象(三)

目录 前言 1.再谈构造函数 1.1 初始化列表 1.2 explicit关键字 2.static成员 2.1 概念 2.2 特性 3.友元 3.1. 友元函数 3.2 友元类 4.内部类 5.匿名对象 6.拷贝对象时的一些编译器优化 前言 今天小编给大家介绍的就是类最后的相关内容&#xff0c;希望大家好好学习理…

僵尸进程?孤儿进程?为什么他有如此惨烈的身世...

文章目录 &#x1f490;专栏导读&#x1f490;文章导读&#x1f337;认识进程状态&#x1f33a;如何查看进程状态 &#x1f337;R状态&#x1f33a;引例&#x1f33a;如何观察 &#x1f337;S状态与D状态&#x1f33a;S状态&#x1f341;如何观察 &#x1f33a;D状态 &#x1f…

【机器学习】Yellowbrick 包的理解和说明

文章目录 一、介绍二、Visualizers2.1 Classification Visualization2.2 Clustering Visualization2.3 Feature Visualization2.4 Model Selection Visualization2.5 Regression Visualization2.6 Target Visualization2.7 Text Visualization 一、介绍 首先是包的安装过程&am…

Reid strong baseline 代码详解

本项目是对Reid strong baseline代码的详解。项目暂未加入目标检测部分&#xff0c;后期会不定时更新&#xff0c;请持续关注。 本相比Reid所用数据集为Markt1501&#xff0c;支持Resnet系列作为训练的baseline网络。训练采用表征学习度量学习的方式。 目录 训练参数 训练代…

前端开发之this.$options.data的使用

前端开发之this.$options.data的使用 前言效果图vue2中使用vue3中使用 前言 this.$options.data:初始化对象 效果图 vue2中使用 this.$options这是一个Vue的特性&#xff0c;它可以让你访问组件的选项对象。你可以使用this.$options.data.call(this)来获取组件的初始数据&am…

pytorch模型转ONNX

目录 1. ONNX 2. pytorch 转 ONNX 3. 加载 ONNX 文件 4. Netron 1. ONNX 一般来说&#xff0c;pytorch训练好的模型是不能够直接用于生产环境&#xff0c;有很多的地方没有优化 而ONNX 格式可以兼顾不同框架的模型&#xff0c;相当于一个中间人的角色。这样部署到不同的环…

msvcr120.dll丢失怎样修复,学这三招就可以修复好

年前才买的新电脑&#xff0c;今天在打开软件ps软件的时候&#xff0c;电脑就提升msvcr120.dll文件丢失&#xff0c;无法执行此代码。刚刚开始以为是电脑的系统没有装好&#xff0c;经过我一下午时间的研究&#xff0c;原来是电脑msvcr120.dll文件丢失一般都是下载到垃圾软件&a…

软件测试后浪太强了,前浪有点顶不住啊,真难受...

想和大家说的话 8年前军哥刚进入到IT行业&#xff0c;现在发现学习软件测试的人越来越多&#xff0c;今天想根据军哥的行业经验再结合自己的一些看法给大家提一些建议。 最近聊到软件测试的行业内卷&#xff0c;越来越多的转行和大学生进入测试行业&#xff0c;导致软件测试已…