首页 > 其他分享 >2024-12-30:所有球里面不同颜色的数目。用go语言,给定一个整数 limit 和一个大小为 n x 2 的二维数组 queries,其中包含若干操作。 我们有 limit + 1 个球,它们的

2024-12-30:所有球里面不同颜色的数目。用go语言,给定一个整数 limit 和一个大小为 n x 2 的二维数组 queries,其中包含若干操作。 我们有 limit + 1 个球,它们的

时间:2024-12-30 10:26:16浏览次数:3  
标签:cnt 12 颜色 ans limit queries go let

2024-12-30:所有球里面不同颜色的数目。用go语言,给定一个整数 limit 和一个大小为 n x 2 的二维数组 queries,其中包含若干操作。

我们有 limit + 1 个球,它们的编号为 [0, limit],每个球的编号都是独特的。

一开始,所有的球都是无色的。

每个操作的形式为 [x, y],表示将球 x 染成颜色 y。

在每次操作后,我们需要计算并返回所有球中不同颜色的数量。

请返回一个长度为 n 的数组 result,该数组的第 i 个元素表示第 i 次操作后不同颜色的总数。

需要注意的是,没有染色的球不计入不同颜色的统计。

1 <= limit <= 1000000000。

1 <= n == queries.length <= 100000。

queries[i].length == 2。

0 <= queries[i][0] <= limit。

1 <= queries[i][1] <= 1000000000。

输入:limit = 4, queries = [[1,4],[2,5],[1,3],[3,4]]。

输出:[1,2,2,3]。

操作 0 后,球 1 颜色为 4 。

操作 1 后,球 1 颜色为 4 ,球 2 颜色为 5 。

操作 2 后,球 1 颜色为 3 ,球 2 颜色为 5 。

操作 3 后,球 1 颜色为 3 ,球 2 颜色为 5 ,球 3 颜色为 4 。

答案2024-12-30:

chatgpt

题目来自leetcode3160。

大体步骤如下:

1.初始化一个空的结果数组 ans,用于存储每次操作后的不同颜色总数。

2.初始化两个空的映射表:color 用于记录球的颜色,cnt 用于记录每种颜色的球数量。

3.遍历操作数组 queries,对每个操作进行处理:

3.a. 获取操作中的球编号 x 和颜色 y

3.b. 如果球 x 已经有颜色,更新颜色计数表 cnt,将之前记录的颜色数量减一,如果数量为0则从计数表中删除此颜色。

3.c. 更新球 x 的颜色为 y,同时更新颜色计数表 cnt 中相应颜色的球数量加一。

3.d. 将当前不同颜色的总数记录在结果数组 ans 中。

4.返回结果数组 ans

总的时间复杂度取决于操作次数n和limit的数量,程序中需要遍历所有的操作,故时间复杂度为O(n)。额外空间复杂度主要由映射表 colorcnt 以及结果数组 ans 所占空间决定,因为这里的颜色数量是有限的,最坏情况下额外空间也是有限的,所以空间复杂度为O(1)。

Go完整代码如下:

package main

import "fmt"

func queryResults(_ int, queries [][]int) []int {
	ans := make([]int, len(queries))
	color := map[int]int{}
	cnt := map[int]int{}
	for i, q := range queries {
		x, y := q[0], q[1]
		if c := color[x]; c > 0 {
			cnt[c]--
			if cnt[c] == 0 {
				delete(cnt, c)
			}
		}
		color[x] = y
		cnt[y]++
		ans[i] = len(cnt)
	}
	return ans
}

func main() {
	limit := 4
	queries := [][]int{{1, 4}, {2, 5}, {1, 3}, {3, 4}}
	result := queryResults(limit, queries)
	fmt.Println(result)
}

在这里插入图片描述

Rust完整代码如下:

use std::collections::HashMap;

fn query_results(_limit: i32, queries: Vec<(i32, i32)>) -> Vec<i32> {
    let mut ans = vec![0; queries.len()];
    let mut color: HashMap<i32, i32> = HashMap::new();
    let mut cnt: HashMap<i32, i32> = HashMap::new();

    for (i, q) in queries.iter().enumerate() {
        let (x, y) = *q;

        // 如果已经有颜色 c,先减少其计数
        if let Some(&c) = color.get(&x) {
            let count = cnt.entry(c).or_insert(0);
            *count -= 1;
            if *count == 0 {
                cnt.remove(&c);
            }
        }

        // 更新颜色
        color.insert(x, y);

        // 增加新颜色 y 的计数
        *cnt.entry(y).or_insert(0) += 1;

        // 结果为当前不同颜色的数量
        ans[i] = cnt.len() as i32;
    }

    ans
}

fn main() {
    let limit = 4;
    let queries = vec![(1, 4), (2, 5), (1, 3), (3, 4)];
    let result = query_results(limit, queries);
    println!("{:?}", result);
}

在这里插入图片描述

标签:cnt,12,颜色,ans,limit,queries,go,let
From: https://blog.csdn.net/weixin_48502062/article/details/144816814

相关文章

  • 【2024-12-29】连岳摘抄
    23:59生活永远是美好的,而人的痛苦却时时发生。                                                 ——路遥高中不属于义务教育,本质上是精英选拔教育,要在其中挑选出最......
  • 【2024-12-28】连岳摘抄
    23:59你的板凳工夫要足够长                                                 ——辛克莱·刘易斯决定一个人好坏的,是看他能不能负责任。什么叫负责任?负责任是能体会......
  • wx.onApiCategoryChange
    wx.onApiCategoryChange(functionlistener)基础库2.33.0开始支持,低版本需做兼容处理。小程序插件:不支持功能描述监听API类别变化事件参数functionlistenerAPI类别变化事件的监听函数参数Objectres属性类型说明apiCategorynumberAPI类别......
  • wx.offApiCategoryChange
    wx.offApiCategoryChange(functionlistener)基础库2.33.0开始支持,低版本需做兼容处理。小程序插件:不支持功能描述移除API类别变化事件的监听函数参数functionlisteneronApiCategoryChange传入的监听函数。不传此参数则移除所有监听函数。示例代码constlisten......
  • wx.getApiCategory
    stringwx.getApiCategory()基础库2.33.0开始支持,低版本需做兼容处理。小程序插件:不支持功能描述获取当前API类别返回值stringAPI类别不同apiCategory场景下的API限制X表示API被限制无法使用;不在表格中的API不限制。defaultnativeFunctionalized......
  • 2024.12.29 周日
    2024.12.29周日Q1.1100Youaregivenanumberinbinaryrepresentationconsistingofexactlynnnbits,possibly,withleadingzeroes.Forexample,for......
  • 使用 Google Cloud Document AI 解析文档的实战演示
    在今天的文章中,我们将深入研究如何使用GoogleCloudDocumentAI来处理和解析PDF文档。这是一个非常强大的工具,能够将非结构化数据转化为结构化数据,方便我们进行理解和分析。老铁们,跟上这波技术浪潮,这个技术点其实不难。技术背景介绍GoogleCloud的DocumentAI提供......
  • 每天40分玩转Django:Django REST框架学习指南
    DjangoREST框架学习指南一、今日学习内容概览知识模块重点内容序列化(Serialization)模型序列化、验证器、嵌套序列化视图集(ViewSets)模型视图集、只读视图集、CRUD操作路由(Routing)自动URL路由、自定义路由、嵌套路由二、详细内容讲解1.序列化(Serialization)序列......
  • 每天40分玩转Django:Django Channels
    DjangoChannels一、今日学习内容概览知识模块重点内容难度系数WebSocket基础WebSocket协议、连接建立、消息传输★★★★☆消息路由URL路由配置、消费者编写、消息处理★★★★☆Channels配置项目配置、ASGI应用、ChannelLayers★★★☆☆二、WebSocket基础1.环境配......
  • Spring Boot引起的“堆外内存泄漏”排查及经验总结12
    背景为了更好地实现对项目的管理,我们将组内一个项目迁移到MDP框架(基于SpringBoot),随后我们就发现系统会频繁报出Swap区域使用量过高的异常。笔者被叫去帮忙查看原因,发现配置了4G堆内内存,但是实际使用的物理内存竟然高达7G,确实不正常。JVM参数配置是“-XX:MetaspaceSize=256M-......