Golang每日一练(leetDay0109) 拼接最大数、区间和的个数

news2024/11/17 14:44:50

目录

321. 拼接最大数 Create Maximum Number  🌟🌟🌟

327. 区间和的个数 Count of Range Sum  🌟🌟🌟

🌟 每日一练刷题专栏 🌟

Rust每日一练 专栏

Golang每日一练 专栏

Python每日一练 专栏

C/C++每日一练 专栏

Java每日一练 专栏


321. 拼接最大数 Create Maximum Number

给定长度分别为 m 和 n 的两个数组,其元素由 0-9 构成,表示两个自然数各位上的数字。现在从这两个数组中选出 k (k <= m + n) 个数字拼接成一个新的数,要求从同一个数组中取出的数字保持其在原数组中的相对顺序。

求满足该条件的最大数。结果返回一个表示该最大数的长度为 k 的数组。

说明: 请尽可能地优化你算法的时间和空间复杂度。

示例 1:

输入:
nums1 = [3, 4, 6, 5]
nums2 = [9, 1, 2, 5, 8, 3]
k = 5
输出: [9, 8, 6, 5, 3]

示例 2:

输入:
nums1 = [6, 7]
nums2 = [6, 0, 4]
k = 5
输出: [6, 7, 6, 0, 4]

示例 3:

输入:
nums1 = [3, 9]
nums2 = [8, 9]
k = 3
输出: [9, 8, 9]

代码:

package main

import "fmt"

func maxNumber(nums1 []int, nums2 []int, k int) []int {
	n1, n2 := len(nums1), len(nums2)
	if n1+n2 < k {
		return nil
	}
	ans := make([]int, k)
	for i := 0; i <= n1 && i <= k; i++ {
		if k-i > n2 {
			continue
		}
		s1 := getMaxSubsequence(nums1, i)
		s2 := getMaxSubsequence(nums2, k-i)
		s := merge(s1, s2)
		if compare(s, 0, ans, 0) > 0 {
			copy(ans, s)
		}
	}
	return ans
}

func getMaxSubsequence(nums []int, k int) []int {
	n := len(nums)
	stack := make([]int, k)
	top := -1
	remain := n - k
	for _, num := range nums {
		for top >= 0 && stack[top] < num && remain > 0 {
			top--
			remain--
		}
		if top < k-1 {
			top++
			stack[top] = num
		} else {
			remain--
		}
	}
	return stack
}

func merge(arr1, arr2 []int) []int {
	n1, n2 := len(arr1), len(arr2)
	if n1 == 0 {
		return arr2
	}
	if n2 == 0 {
		return arr1
	}
	ans := make([]int, n1+n2)
	i, j, k := 0, 0, 0
	for i < n1 && j < n2 {
		if compare(arr1, i, arr2, j) > 0 {
			ans[k] = arr1[i]
			i++
		} else {
			ans[k] = arr2[j]
			j++
		}
		k++
	}
	for i < n1 {
		ans[k] = arr1[i]
		i++
		k++
	}
	for j < n2 {
		ans[k] = arr2[j]
		j++
		k++
	}
	return ans
}

func compare(arr1 []int, i int, arr2 []int, j int) int {
	for i < len(arr1) && j < len(arr2) {
		diff := arr1[i] - arr2[j]
		if diff != 0 {
			return diff
		}
		i++
		j++
	}
	return (len(arr1) - i) - (len(arr2) - j)
}

func main() {
	nums1 := []int{3, 4, 6, 5}
	nums2 := []int{9, 1, 2, 5, 8, 3}
	k := 5
	fmt.Println(maxNumber(nums1, nums2, k)) // 输出 [9, 8, 6, 5, 3]

	nums1 = []int{6, 7}
	nums2 = []int{6, 0, 4}
	k = 5
	fmt.Println(maxNumber(nums1, nums2, k)) // 输出 [6, 7, 6, 0, 4]

	nums1 = []int{3, 9}
	nums2 = []int{8, 9}
	k = 3
	fmt.Println(maxNumber(nums1, nums2, k)) // 输出 [9, 8, 9]
}

输出:

[9 8 6 5 3]

[6 7 6 0 4]

[9 8 9]


327. 区间和的个数 Count of Range Sum

给你一个整数数组 nums 以及两个整数 lower 和 upper 。求数组中,值位于范围 [lower, upper] (包含 lower 和 upper)之内的 区间和的个数 。

区间和 S(i, j) 表示在 nums 中,位置从 i 到 j 的元素之和,包含 i 和 j (i ≤ j)。

示例 1:

输入:nums = [-2,5,-1], lower = -2, upper = 2
输出:3
解释:存在三个区间:[0,0]、[2,2] 和 [0,2] ,对应的区间和分别是:-2 、-1 、2 。

示例 2:

输入:nums = [0], lower = 0, upper = 0
输出:1

提示:

  • 1 <= nums.length <= 10^5
  • -2^31 <= nums[i] <= 2^31 - 1
  • -10^5 <= lower <= upper <= 10^5
  • 题目数据保证答案是一个 32 位 的整数

代码:

package main

import "fmt"

func countRangeSum(nums []int, lower int, upper int) int {
	preSum := make([]int, len(nums)+1)
	for i, num := range nums {
		preSum[i+1] = preSum[i] + num
	}
	return mergeSort(preSum, 0, len(preSum)-1, lower, upper)
}

func mergeSort(nums []int, l, r, lower, upper int) int {
	if l >= r {
		return 0
	}
	mid := (l + r) >> 1
	count := mergeSort(nums, l, mid, lower, upper) + mergeSort(nums, mid+1, r, lower, upper)
	i, j := mid+1, mid+1
	for k := l; k <= mid; k++ {
		for i <= r && nums[i]-nums[k] < lower {
			i++
		}
		for j <= r && nums[j]-nums[k] <= upper {
			j++
		}
		count += j - i
	}
	merge(nums, l, mid, r)
	return count
}

func merge(nums []int, l, mid, r int) {
	tmp := make([]int, r-l+1)
	i, j, k := l, mid+1, 0
	for i <= mid && j <= r {
		if nums[i] < nums[j] {
			tmp[k] = nums[i]
			i++
		} else {
			tmp[k] = nums[j]
			j++
		}
		k++
	}
	for i <= mid {
		tmp[k] = nums[i]
		i++
		k++
	}
	for j <= r {
		tmp[k] = nums[j]
		j++
		k++
	}
	copy(nums[l:r+1], tmp)
}

func main() {
	nums := []int{-2, 5, -1}
	lower := -2
	upper := 2
	fmt.Println(countRangeSum(nums, lower, upper))

	nums = []int{0}
	lower = -2
	upper = 2
	fmt.Println(countRangeSum(nums, lower, upper))
}

输出:

3
1

暴力枚举:

```golang
func countRangeSum(nums []int, lower int, upper int) int {
    count := 0
    for i := 0; i < len(nums); i++ {
        for j := i; j < len(nums); j++ {
            sum := 0
            for k := i; k <= j; k++ {
                sum += nums[k]
            }
            if sum >= lower && sum <= upper {
                count++
            }
        }
    }
    return count
}
```


🌟 每日一练刷题专栏 🌟

持续,努力奋斗做强刷题搬运工!

👍 点赞,你的认可是我坚持的动力! 

🌟 收藏,你的青睐是我努力的方向! 

评论,你的意见是我进步的财富!  

 主页:https://hannyang.blog.csdn.net/ 

Rust每日一练 专栏

(2023.5.16~)更新中...

Golang每日一练 专栏

(2023.3.11~)更新中...

Python每日一练 专栏

(2023.2.18~2023.5.18)暂停更

C/C++每日一练 专栏

(2023.2.18~2023.5.18)暂停更

Java每日一练 专栏

(2023.3.11~2023.5.18)暂停更

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/689497.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Android】怎么把一个自定义Dialog弄成一个圆形的

需求 自定义一个Dialog&#xff0c;做成圆形 实现 实现步骤&#xff1a; 创建XML布局 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"http://s…

多元分类预测 | Matlab麻雀算法(SSA)优化极限学习机(ELM)的分类预测,多特征输入模型。SSA-ELM分类预测模型

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 麻雀算法(SSA)优化极限学习机(ELM)的分类预测,多特征输入模型。SSA-ELM分类预测模型 多特征输入单输出的二分类及多分类模型。程序内注释详细,直接替换数据就可以用。程序语言为matlab,程序可出分类效果图,迭代…

C#中如何调整easyui中控件方法$.messager.alert弹窗窗口和字体的大小

首先看下调整前的效果&#xff1a; 这是easyui 默认的一个效果&#xff0c;然后 我在网上搜调整大小&#xff0c;搜到的代码是这样的 $.messager.alert({title: 提示,msg: ,icon: warning,ok: 确定,style: {fontSize: 20px // 修改字体大小},fn: function(){$(.messager-windo…

Git 常用指令

查看修改的文件 将修改的文件添加到版本库 Git如何创建、切换、删除分支? 合并分支 新建分支 切换分支 合并分支&#xff0c;解决冲突 删除分支

如何校验 MySQLOracle 时间字段合规性?

作者&#xff1a;余振兴 爱可生 DBA 团队成员&#xff0c;热衷技术分享、编写技术文档。 本文来源&#xff1a;原创投稿 爱可生开源社区出品&#xff0c;原创内容未经授权不得随意使用&#xff0c;转载请联系小编并注明来源。 背景信息 在数据迁移或者数据库低版本升级到高版本…

基于OneAPI工具分析包TensorFlow的聊天机器人设计分析和总结

文章目录 基础介绍&#xff1a;实现思路&#xff1a;详细介绍1. 聊天机器人发展历程&#xff1a;2. embedding_attention_seq2seq接口&#xff1a;3. 训练模型&#xff1a;4. Python编程实现完整的聊天机器人&#xff1a;补充内容&#xff1a; 环境搭建与关键技术环境搭建关键技…

【跟晓月学数据库】基于book库的mysql进阶实战

前言 上篇文章中&#xff0c;我们已经导入了book库&#xff0c;如果你还没有导入book库&#xff0c;参考&#xff1a;【跟晓月学数据库】使用MySQLdump 对数据导入导出 这篇文章&#xff0c;主要是基于book库的操作&#xff0c;希望对你有用。 &#x1f3e0;个人主页&#xf…

如何在vue项目开发中使用tailwindcss样式

在vue项目中下载tailwindcss依赖 yarn add tailwindcss1.4.6ornpm i tailwindcss1.4.6新建一个tailwind.css文件 在src文件夹下的asset静态资源文件夹中创建一个css样式文件夹&#xff0c;然后在该css文件夹下创建一个tailwind.css文件&#xff0c;并在文件中写入如下代码 使用…

xss-labs靶场level1~5

参考资料&#xff1a; XSS常见的触发标签_可以触发xss的标签_H3rmesk1t的博客-CSDN博客 基础知识&#xff1a; XSS漏洞的定义: 跨站脚本攻击XSS(Cross Site Scripting)&#xff0c;为了不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆&#xff0c;故将跨站脚本攻击缩…

android 添加图片 error 使用

安卓开发在drawable文件夹下如何插入后缀为xhdpi xxxhdpi 的图片 1&#xff1a;copy图片进drawable文件夹时&#xff0c;在路径后面加上“-xhdpi” 2.直接在drawable文件夹下新建一个drawable-xhdpi文件夹&#xff0c;你再添加图片的时候就会让你选择将图片具体放到哪个文件夹下…

高速电路设计系列分享-熟悉JESD204B(上)

目录 概要 整体架构流程 技术名词解释 技术细节 1.应用层 2.传输层 小结 基本概要 随着高速ADC跨入GSPS范围&#xff0c;与FPGA(定制ASIC)进行数据传输的首选接口协JESD204B。为了捕捉频率范围更高的RF频谱&#xff0c;需要宽带RFADC。在其推动下&#xff0c;对于能够捕捉更宽带…

Tomcat【管理页面】

管理页面的功能 server status &#xff1a;图形化管理、查看页面状态Manager app&#xff1a;图像化添加、创建、部署、删除项目目录host manager&#xff1a;图形化创建、管理、删除虚拟主机 默认安装tomcat需要配置以后才能使用 配置conf/tomcat-users.xml [rootnginx ROO…

网络通信性能测试方法-iperf、ping

1 iperf工具下载安装 根据板卡类型,选择合适的iperf软件版本下载 (ARM64) wget https://iperf.fr/download/ubuntu/iperf3_3.1.3-1_arm64.deb 根据提示下载依赖 wget https://iperf.fr/download/ubuntu/libiperf0_3.1.3-1_arm64.deb 下载后使用命令sudo dpkg -i xxx.deb …

黑河学院ASP.NET程序设计大作业(3)--登录及账号密码的CURD

目录 一、效果&#xff1a; 二、代码分布&#xff1a; 三、介绍 1.添加用户 2.删除用户&#xff1a; 3.修改密码&#xff1a; 四、遇到的问题&#xff1a; 一、效果&#xff1a; 二、代码分布&#xff1a; 三、介绍 1.添加用户 判断是否是管理员&#xff0c;只有管理员才可以…

chatgpt赋能python:用Python计算圆周率的两种方法

用Python计算圆周率的两种方法 圆周率&#xff08;π&#xff09;是一个非常重要的数学常数&#xff0c;被广泛应用于数学、计算机科学和工程学中。本文将介绍两种使用Python计算圆周率的方法&#xff1a;蒙特卡罗方法和Bailey–Borwein–Plouffe算法。 蒙特卡罗方法 蒙特卡…

C++笔记之字符指针和字符数组的区别

C笔记之字符指针char*和字符数组char[]的区别 code review! 文章目录 C笔记之字符指针char\*和字符数组char[]的区别1.char \[]和char \*的区别2.char\[]和char\*如何相互转换3.char\*,char\[ ],char\[20] 是字符串还是数组&#xff0c;哪一种长度是固定的&#xff1f;4.字符…

【软考网络管理员】2023年软考网管初级常见知识考点(20)- Web服务器配置

涉及知识点 网站的基本配置&#xff0c;虚拟目录的配置&#xff0c;Web服务器配置&#xff0c;虚拟主机的配置&#xff0c;站点安全的设置&#xff0c;HTTPS网站的配置&#xff0c;软考网络管理员常考知识点&#xff0c;软考网络管理员网络安全&#xff0c;网络管理员考点汇总…

利用Django路由项的别名(name)对路由进行反向解析

在Django的函数path()中&#xff0c;可以给一条路由进行命名&#xff0c;然后在视图函数或模板HTML文件中进行调用&#xff0c;这样的好处是&#xff1a;只要路由的name不变&#xff0c;那么修改了URL具体的路由&#xff0c;也不用去更改视图函数或模板HTML中的相关代码&#x…

Redis7【① 概述 安装 配置】

1. Redis入门概述 1. Redis是什么 Redis全称 远程字典服务器&#xff08;Remote Dictionary Server&#xff09;&#xff0c;它是完全开源的&#xff0c;使用ANSIC语言编写遵守BSD协议&#xff0c;是一个高性能的基于内存的Key-Value数据库&#xff0c;提供了丰富的数据结构&…

基于VMD-SSA-LSTM的多维时序光伏功率预测MATLAB程序

基于VMD-SSA-LSTM的多维时序光伏功率预测MATLAB程序资源-CSDN文库https://download.csdn.net/download/weixin_56691527/87950148参考文献&#xff1a; 《基于VMD-SSA-LSSVM的短期风电预测》 《基于改进鲸鱼优化算法的微网系统能量优化管理》 主要内容&#xff1a; 融合了两…