题目如下:

Given an array nums of positive integers, return the longest possible length of an array prefix of nums, such that it is possible to remove exactly one element from this prefix so that every number that has appeared in it will have the same number of occurrences.

If after removing one element there are no remaining elements, it's still considered that every appeared number has the same number of ocurrences (0).

Example 1:

Input: nums = [2,2,1,1,5,3,3,5]
Output: 7
Explanation: For the subarray [2,2,1,1,5,3,3] of length 7, if we remove nums[4]=5, we will get [2,2,1,1,3,3],
so that each number will appear exactly twice.

Example 2:

Input: nums = [1,1,1,2,2,2,3,3,3,4,4,4,5]
Output: 13

Example 3:

Input: nums = [1,1,1,2,2,2]
Output: 5

Example 4:

Input: nums = [10,2,8,9,3,8,1,5,2,3,7,6]
Output: 8

Constraints:

  • 2 <= nums.length <= 10^5
  • 1 <= nums[i] <= 10^5

解题思路:从头开始遍历nums,很容易可以求出0~i区间内每个数字出现的次数,并用dic_count存储,key为数字的值,而value为数字出现的次数。同时再用dic记录dic_count中每个次数出现的次数。例如 [1,1,1,2,2,2,3,3,3,4,4,4,5] 区间,dic_count = {1: 3, 2: 3, 3: 3, 4: 3, 5: 1},而dic = {1: 1, 3: 4} ,这里1:1表示在dic_count中出现1次的数字有1个,出现3次的数字有四个。很显然,要判断0~i区间是否删除一个元素后可以使得所有元素出现的次数一样,需要满足以下条件:

1. 如果len(dic)为1,只要所有的元素都只出现一次,那么这个区间就是满足题目要求的;

2. 如果len(dic)为2,需要满足有且仅有一个元素出现一次,表示可以删除掉这个元素。或者是有且仅有一个元素出现的次数是其他元素出现的次数+1,表示删除掉这个元素后就使得其和其他元素出现次数一致。

代码如下:

class Solution(object):
def maxEqualFreq(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
res = 0
dic_count = {}
dic = {}
for i in range(len(nums)):
if nums[i] in dic_count:
dic_count[nums[i]] += 1
count = dic_count[nums[i]]
dic[count] = dic.setdefault(count, 0) + 1
if count > 1 and count - 1 in dic:
dic[count - 1] -= 1
if dic[count - 1] == 0:
del dic[count - 1]
else:
dic_count[nums[i]] = 1
count = dic_count[nums[i]]
dic[count] = dic.setdefault(count, 0) + 1 if len(dic) == 2:
k1 = k2 = None
for key in dic.iterkeys():
if k1 == None:
k1 = key
continue
k2 = key
#if abs(k1-k2) == 1 and (dic[k1] == 1 or dic[k2] == 1):res = (i+1)
if (k1 - k2 == 1 and dic[k1] == 1) or (k2 - k1 == 1 and dic[k2] == 1):res = i+1
elif (k1 == dic[k1] == 1) or (k2 == 1 and dic[k2] == 1):res = i + 1
elif len(dic) == 1:
# key is 1 : ex, input is [1,0]
if 1 in dic and dic[1] > 0:res = i+1
else:
for val in dic.itervalues():
if val == 1:res = i+1
return res

【leetcode】1224. Maximum Equal Frequency的更多相关文章

  1. 【LeetCode】895. Maximum Frequency Stack 解题报告(Python)

    [LeetCode]895. Maximum Frequency Stack 解题报告(Python) 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxueming ...

  2. 【leetcode】998. Maximum Binary Tree II

    题目如下: We are given the root node of a maximum tree: a tree where every node has a value greater than ...

  3. 【LeetCode】718. Maximum Length of Repeated Subarray 解题报告(Python)

    [LeetCode]718. Maximum Length of Repeated Subarray 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxu ...

  4. 【LeetCode】662. Maximum Width of Binary Tree 解题报告(Python)

    [LeetCode]662. Maximum Width of Binary Tree 解题报告(Python) 标签(空格分隔): LeetCode 题目地址:https://leetcode.co ...

  5. 【Leetcode】164. Maximum Gap 【基数排序】

    Given an unsorted array, find the maximum difference between the successive elements in its sorted f ...

  6. 【leetcode】1292. Maximum Side Length of a Square with Sum Less than or Equal to Threshold

    题目如下: Given a m x n matrix mat and an integer threshold. Return the maximum side-length of a square ...

  7. 【leetcode】1255. Maximum Score Words Formed by Letters

    题目如下: Given a list of words, list of  single letters (might be repeating) and score of every charact ...

  8. 【leetcode】1208. Get Equal Substrings Within Budget

    题目如下: You are given two strings s and t of the same length. You want to change s to t. Changing the  ...

  9. 【leetcode】1189. Maximum Number of Balloons

    题目如下: Given a string text, you want to use the characters of text to form as many instances of the w ...

随机推荐

  1. 滚动翻页vue

    <template> <div class="home"> <div style="height:100%; width:100%;&quo ...

  2. 【DSP开发】shared memory VS mailbox

    Hello, Hi everyone, I have a simple question. Could anyone explain to me the difference between Mail ...

  3. python logger 日志模块

    logger 日志 """logging配置""" import osimport logging.config # 定义三种日志输出格式 ...

  4. IF-ELSE嵌套练习

    一,1,编写程序,由键盘输入三个整数分别存入变量num1,num2,num3中,对它们进行排序,使用if-else结构,并按从小到大的顺序输出: package practice; import ja ...

  5. python 并发编程 多线程 守护线程

    做完工作这个进程就应该被销毁 单线程情况: 一个进程 ,默认有一个主线程 ,这个主线程执行完代码后 ,就应该自动销毁.然后进程也销毁. 多线程情况: 主线程代表进程结束 一个进程可以开多个线程,默认开 ...

  6. HDU 1069 Monkey and Banana (动态规划、上升子序列最大和)

    Monkey and Banana Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others ...

  7. Dubbo从入门到精通

    1.在Dubbo中注解的使用 2.Dubbo启动时qos-server can not bind localhost:22222错误解决 3.Dubbo配置方式详解

  8. Luogu P3953 [NOIP2017]逛公园

    题目 首先我们跑出从\(1\)出发的最短路\(d1\)和反图上从\(n\)出发的最短路\(dn\). 然后我们处理出长度不超过\(d1_n+k\)的最短路边集,给它拓扑排序. 如果存在环,那么这个环一 ...

  9. Android引用多媒体

    res目录下,创建raw目录(Android会自动识别这个目录),如果自己创建的目录,可能无效底下的mp3格式,mp4格式的文件名必须小写. 引用方式: mediaPlayer = MediaPlay ...

  10. 剑指offer-数值的整数次方-调整数组顺序使奇数位于偶数前面-代码的完整性-python

    题目描述 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方.   保证base和exponent不同时为0   思路 求base的expon ...