首页 > 其他分享 >数组-Leetcode-697

数组-Leetcode-697

时间:2023-03-07 15:32:18浏览次数:27  
标签:blue 697 nums counter num 数组 print Leetcode


​​0️⃣python数据结构与算法学习路线​​ 学习内容:

  • 基本算法:枚举、排序、搜索、递归、分治、优先搜索、贪心、双指针、动态规划等…
  • 数据结构:字符串(string)、列表(list)、元组(tuple)、字典(dictionary)、集合(set)、数组、队列、栈、树、图、堆等…

题目:

给定一个非空且只包含非负数的整数数组 nums,数组的度的定义是指数组里任一元素出现频数的最大值。
你的任务是在 nums 中找到与 nums 拥有相同大小的度的最短连续子数组,返回其长度。

输入输出:

输入:[1, 2, 2, 3, 1]
输出:2
解释:
输入数组的度是2,因为元素1和2的出现频数最大,均为2.
连续子数组里面拥有相同度的有如下所示:
[1, 2, 2, 3, 1], [1, 2, 2, 3], [2, 2, 3, 1], [1, 2, 2], [2, 2, 3], [2, 2]
最短连续子数组[2, 2]的长度为2,所以返回2.

解题思路:

  1. 获取词频
  2. 按词频搜索开始和结束的位置,取最长的一个

算法实现:

class Solution:
def findShortestSubArray(self, nums: List[int]) -> int:
left, right = dict(), dict()
counter = collections.Counter()
for i, num in enumerate(nums):
if num not in left:
left[num] = i
right[num] = i
counter[num] += 1
degree = max(counter.values())
res = len(nums)
for k, v in counter.items():
if v == degree:
res = min(res, right[k] - left[k] + 1)
return res

出现问题:

  1. collections.Counter():计数器,记录次的频率
    counter.items()
    counter.values()
from collections import Counter
colors = ['red', 'blue', 'red', 'green', 'blue', 'blue']
c = Counter(colors)

print (dict(c))
# 输出{'red': 2, 'blue': 3, 'green': 1}

print (c.keys())
# 输出{'red','blue','green'}

print(c.values())
# 输出([2, 3, 1])

print(temp.items())
# 输出([('red', 2), ('blue, 3), ('green', 1)])
  1. enumerate()
s = [1, 2, 3, 4, 5] # List
# 从指定索引3开始
for index, value in enumerate(s, 3):
print('%s, %s' % (index, value))
'''
输出:
3, 1
4, 2
5, 3
6, 4
7, 5
'''
  1. 统计开始和结束的位置可以用双指针


标签:blue,697,nums,counter,num,数组,print,Leetcode
From: https://blog.51cto.com/u_15995006/6106167

相关文章

  • LeetCode题分类
    一.数组题目分类题目编号数组的遍历485、495、414、628统计数组中的元素645、697、448、442、41、274数组的改变、移动453、665、283二维数组及滚动数组118、119......
  • 动态规划-leetcode-494
    ​​0️⃣python数据结构与算法学习路线​​学习内容:基本算法:枚举、排序、搜索、递归、分治、优先搜索、贪心、双指针、动态规划等…数据结构:字符串(string)、列表(list)、元......
  • 指针数组和数组指针
    普通数组:intarr[5];//数组arr中存放了5个整型数intintintintintarr[0]arr[1]arr[2]arr[3]arr[4]   指针数组:是一个数组,里面存放的是指针......
  • 【队列】LeetCode 1429. 第一个唯一数字
    题目链接1429.第一个唯一数字给定一系列整数,插入一个队列中,找出队列中第一个唯一整数。实现FirstUnique类:FirstUnique(int[]nums)用数组里的数字初始化队列。in......
  • 【二分查找】LeetCode 4. 寻找两个正序数组的中位数
    题目链接4.寻找两个正序数组的中位数思路分治代码classSolution{publicdoublefindMedianSortedArrays(int[]nums1,int[]nums2){if(nums1.len......
  • 数组去重、交集、归并
    去重简单结构letarr=[1,2,3,5,3,5,2,1]Set去重constnewArr1=[...newSet(arr)]//或constnewArr2=Array.from(newSet(arr))indexOf去重constnewArr=......
  • 05、函数传递多维数组
    第一种方法必须使用5来限制参数类型是int[5],另一个参数可以指定voidprint(intm[][5],intdim1){for(inti=0;i!=dim1;i++){for(intj=0;j!=5;j++){......
  • LEETCODE 1096. 花括号展开 II
    这个题把题目中的表达式并列关系看做是求和,把相接看做是求积,那么求解整个表达式的过程可以类比于求解中缀表达式的过程。然后利用两个栈一个存运算符,一个存运算对象classSo......
  • LeetCode1024 -- 贪心
    1.题目描述这题题意感觉说的不是很清楚,容易让人产生歧义!其实题意很简单,给你一个链表head,你深拷贝它,然后返回即可,注意不能修改原链表/*//DefinitionforaNode.cl......
  • C字符数组和字符指针
    constchar*string="abcd";charstring[]="abcd";第一种称为字符串常量,字符串存储在常量区,由字符指针进行访问,但是不能够修改第二种是字符串数组,相当于创......