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

题目描述

在一个仓库里,有一排条形码,其中第 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. 什么情况下,这个空位置会被减少呢,有且只有两种情况:

  • 数组尾部的的元素,和它前一个元素相同,那么他们之间有一个空位要填,如果把尾部的元素拿走,填到其他地方,就破坏了这个空位,那么就可以减少一个空位。
  • 数组尾部的的元素,放到一个与它相邻元素的值都不一样的位置,如果这两个相邻元素是一样的,那么相当于这个尾部元素就把一个空位给填了,那么就可以减少一个
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值