当前位置:网站首页>2170. 使数组变成交替数组的最少操作数
2170. 使数组变成交替数组的最少操作数
2022-08-02 19:53:00 【沉沉沉小姐】
题目链接:https://leetcode.cn/problems/minimum-operations-to-make-the-array-alternating/
题目描述:
给你一个下标从 0 开始的数组 nums ,该数组由 n 个正整数组成。
如果满足下述条件,则数组 nums 是一个 交替数组 :
nums[i - 2] == nums[i] ,其中 2 <= i <= n - 1 。
nums[i - 1] != nums[i] ,其中 1 <= i <= n - 1 。
在一步 操作 中,你可以选择下标 i 并将 nums[i] 更改 为 任一 正整数。
返回使数组变成交替数组的 最少操作数 。
示例1:
输入:nums = [3,1,3,2,4,3]
输出:3
解释:
使数组变成交替数组的方法之一是将该数组转换为 [3,1,3,1,3,1] 。
在这种情况下,操作数为 3 。
可以证明,操作数少于 3 的情况下,无法使数组变成交替数组。示例2:
输入:nums = [1,2,2,2,2]
输出:2
解释:
使数组变成交替数组的方法之一是将该数组转换为 [1,2,1,2,1].
在这种情况下,操作数为 2 。
注意,数组不能转换成 [2,2,2,2,2] 。因为在这种情况下,nums[0] == nums[1],不满足交替数组的条件。
提示:
1 <= nums.length <= 1051 <= nums[i] <= 105
解题思路:
- 奇数下标和偶数下标的数字不能相同
- 奇数下标的数字一致,偶数下标的数字一致
- 使用列表长度-奇数中出现最多的数的次数-偶数中出现最多的数的次数
注:可能奇数和偶数的出现频率最高的数字一致,则需考虑次高选项
代码:
class Solution(object):
def minimumOperations(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
count = 0 # 计算奇数项与偶数项(二者值不同)出现频率最高数字的总和
count1 = 0
count2 = 0
n = len(nums)
if len(nums) == 1: # 出现[1]则无需操作
return 0
else:
# 计算偶数项出现频率最高的前两项
a_most = Counter([y for x,y in enumerate(nums) if x%2 == 0]).most_common(2)
# 计算奇数项出现频率最高的前两项
b_most = Counter([y for x,y in enumerate(nums) if x%2 != 0]).most_common(2)
# 先取奇数项与偶数项出现频率最高的数
a = a_most[0][0]
b = b_most[0][0]
# 若奇数项和偶数项出现频率最高的数值相等
if a==b:
if len(a_most)==1 and len(b_most)==1: # 类似[2,2]或[1,1,1,1,1]的情况
return n//2
elif len(a_most)>1: # 防止出现下标超出数组长度情况
# 计算取奇数出现频率最高数值的次数与偶数出现频率次高数值的次数之和
count1 = a_most[1][1]+b_most[0][1]
if len(b_most)>1:
# 计算取偶数出现频率最高数值的次数与奇数出现频率次高数值的次数之和
count2 = a_most[0][1]+b_most[1][1]
# 比较二者大小
if count1 > count2:
count = count1
else:
count = count2
else: # 奇数和偶数出现频率最高数值不等
count = a_most[0][1] + b_most[0][1]
return n - count注:
- enumerate(nums),返回值为下标,数值
- Counter(nums)计算各个数值出现的频率
- most_common(2)表示出现频率前两名
边栏推荐
猜你喜欢

AI Scientist: Automatically discover hidden state variables of physical systems

es 读流程源码解析

Axure9的元件用法

ShapeableImageView 的使用,告别shape、三方库

Leetcode刷题——字符串相加相关题目(415. 字符串相加、面试题 02.05. 链表求和、2. 两数相加)

SCANIA SCANIA OTL tag is introduced

AI科学家:自动发现物理系统的隐藏状态变量

MySQL安装配置教程(超级详细、保姆级)

Office2021 安装MathType

MySQL安装(详细,适合小白)
随机推荐
Flutter自带国际化适配自动生成方案
什么是乙二醇二乙酸酯(EGDA)?
新增指令 v-memo
分享一个 web 应用版本监测 (更新) 的工具库
溜不溜是个问题
Shell: conditional statements
服务器Centos7 静默安装Oracle Database 12.2
JWT学习
【LeetCode】1161. 最大层内元素和
golang 源码分析:juju/ratelimit
【数据分析】:什么是数据分析?
ShardingSphere-proxy +PostgreSQL implements read-write separation (static strategy)
LM小型可编程控制器软件(基于CoDeSys)笔记二十五:plc的数据存储区(数字量输入通道部分)
技术分享 | Apache Linkis 快速集成网页IDE工具 Scriptis
Caldera(二)高级实战
setup语法糖 defineProps defineEmits defineExpose
es 读流程源码解析
SQL Server实现group_concat功能
Golang source code analysis: juju/ratelimit
postgresql autovaccum自动清理