首页 > 其他分享 >2024-07-27:用go语言,给定一个正整数数组,最开始可以对数组中的元素进行增加操作,每个元素最多加1。 然后从修改后的数组中选出一个或多个元素,使得这些元素排序后是连续的。 要求找出最多可以选

2024-07-27:用go语言,给定一个正整数数组,最开始可以对数组中的元素进行增加操作,每个元素最多加1。 然后从修改后的数组中选出一个或多个元素,使得这些元素排序后是连续的。 要求找出最多可以选

时间:2024-07-27 22:07:42浏览次数:14  
标签:nums maxSelectedElements 元素 数组 ans go 排序

2024-07-27:用go语言,给定一个正整数数组,最开始可以对数组中的元素进行增加操作,每个元素最多加1。

然后从修改后的数组中选出一个或多个元素,使得这些元素排序后是连续的。

要求找出最多可以选出的元素数量。

输入:nums = [2,1,5,1,1]。

输出:3。

解释:我们将下标 0 和 3 处的元素增加 1 ,得到结果数组 nums = [3,1,5,2,1] 。

我们选择元素 [3,1,5,2,1] 并将它们排序得到 [1,2,3] ,是连续元素。

最多可以得到 3 个连续元素。

答案2024-07-27:

chatgpt

题目来自leetcode3041。

大体步骤如下:

1.定义一个函数 maxSelectedElements(nums),参数为一个整数数组 nums,返回最多可选出的连续元素数量。

2.初始化一个空的映射 f 用于存储每个数字及其相邻数字出现的次数。

3.对输入的数组 nums 进行排序,确保数组中的元素是升序排列。

4.遍历排序后的数组 nums,对于数组中的每个元素 x:

  • 更新映射 f[x+1] 为 f[x] + 1,表示 x+1 与 x 相邻的数字出现的次数。

  • 更新映射 f[x] 为 f[x-1] + 1,表示 x 与 x-1 相邻的数字出现的次数。

5.遍历映射 f 中的所有值,取其中的最大值作为答案。

总的时间复杂度为 O(nlogn) 其中 n 是输入数组的长度,主要由排序算法造成。

总的额外空间复杂度为 O(n),用来存储映射 f。

Go完整代码如下:

package main

import (
	"fmt"
    "slices"
)

func maxSelectedElements(nums []int) (ans int) {
	slices.Sort(nums)
	f := map[int]int{}
	for _, x := range nums {
		f[x+1] = f[x] + 1
		f[x] = f[x-1] + 1
	}
	for _, res := range f {
		ans = max(ans, res)
	}
	return
}


func main() {
	nums:=[]int{2,1,5,1,1}
	fmt.Println(maxSelectedElements(nums))
}

在这里插入图片描述

Python完整代码如下:

# -*-coding:utf-8-*-

def maxSelectedElements(nums):
    nums.sort()
    f = {}
    ans = 0
    for x in nums:
        f[x+1] = f.get(x, 0) + 1
        f[x] = f.get(x-1, 0) + 1
    for res in f.values():
        ans = max(ans, res)
    return ans

nums = [2, 1, 5, 1, 1]
print(maxSelectedElements(nums))

在这里插入图片描述

标签:nums,maxSelectedElements,元素,数组,ans,go,排序
From: https://www.cnblogs.com/moonfdd/p/18327589

相关文章

  • 如何使用hugo搭建个人博客
    整体架构在github托管两个仓库,仓库1保存博客内容源文件,仓库2保存Hugo生成的网站文件,博客内容仓库通过gitsubmodule的方式在仓库2管理。使用Obsidiangit拉取博客内容仓库,通过ob编写博客并推送到仓库1,推送后触发仓库2githubaction使用hugo构建网站并部署......
  • go高并发之路——数据聚合处理
    数据聚合处理,指的是在某个请求或者脚本处理中,我们不会把这个数据立刻响应给前端或者立刻发送给下游,而是对数据先进行聚合处理一下,等到达某个阈值(时间或者量级),再响应给前端或者发送给下游。举个实际的业务场景:直播间有一个做任务的功能,用户满足购买了多少金额我们就会给该用户发放......
  • 1.线性结构(上)——数组与链表
    线性结构(上):数组和链表1.数据结构基本分类线性结构:表、栈、队列非线性结构:树、图、集合本节,我们主要围绕线性表展开讨论线性表主要有两类存储方式:即顺序存储方式——顺序表(数组);链表存储方式——链表在探讨线性表时,我们主要把目光聚焦在“增、删、查”这三种操作之上,同时我们......
  • golang 数组转为链表 - 正序和逆序
    有时候,有这样的场景,我们需要就给定数组将其转为一个链表,通常的思路有两种:正序逆序以下是具体的代码实现和测试函数:packagemainimport("fmt""testing")typelistNodestruct{next*listNodevalint}//正序遍历构建链表//通过一个虚拟头结点,不......
  • C语言程序设计核心详解 第八章 指针超详细讲解_指针变量_二维数组指针_指向字符串指针
    写在最前,一篇文章学会C语言指针顶级重要,学习C语言最重要的一部分-------指针第八章指针超详细讲解_指针变量_二维数组指针_指向字符串指针文章目录写在最前,一篇文章学会C语言指针第八章指针超详细讲解_指针变量_二维数组指针_指向字符串指针1.指针变量1.1指针变......
  • 【Go】基于 Go 1.19 的站点模板爬虫【实战演练版】
    0.前言Go语言,也被称为Golang,是由Google开发的一种开源编程语言,它在2009年首次发布,并在2012年正式开源。Go语言被设计用来简化大型软件的开发,特别注重并发编程和内存安全。0.1特点静态类型:Go是静态类型语言,这意味着类型在编译时已经确定,有助于在编译阶段捕捉错误......
  • 入门C语言Day18——break&continue&goto语句
    前面的博文中有提到do-while与for循环语句,其中的流程图中有break和continue这两个部分还没解释。所以今天先来解释一下break与continue语句。break和continue两个关键字都被运用在循环中。break的作用是永久的终止循环,只要break被执行,直接就会跳出循环,继续往后执行。......
  • 数组基础、多维数组、静态Array
    数组:一组数据。本身是一种类型(引用类型),但它中存储的元素(项)也有数据类型,数组只能用来存储类型相同的强类型的数据,比如班级只能用来存放学生,不能放别的。数组在内存中是按定长连续来存储的,具有相同数据类型的数据元素的有序集合。inta=10;//一个数据boolb=true;//一......
  • Golang 高性能 Websocket 库 gws 使用与设计(一)
    前言大家好这里是,白泽,这期分析一下golang开源高性能websocket库gws。视频讲解请关注......
  • Python毕业设计基于Django的网上购物销售系统(代码+数据库+文档LW+运行成功)
    文末获取资源,收藏关注不迷路文章目录一、项目介绍二、主要使用技术三、研究内容四、核心代码五、文章目录一、项目介绍随着互联网技术的不断发展和普及,电子商务行业迅速崛起。越来越多的消费者选择在线购物,享受便捷、快速的购物体验。因此,开发一款基于Python的购物......