Golang每日一练(leetDay0063) 最大数、重复的DNA序列

news2024/12/23 0:10:30

目录

179. 最大数 Largest Number  🌟🌟

187. 重复的DNA序列 Repeated DNA Sequences  🌟🌟

🌟 每日一练刷题专栏 🌟

Golang每日一练 专栏

Python每日一练 专栏

C/C++每日一练 专栏

Java每日一练 专栏


注:175~178、180~185.为SQL专用题,跳过;186. 188. 已提前做了,链接如下: 

186. 颠倒字符串里的单词 II Reverse Words In A String II  🌟🌟

188. 买卖股票的最佳时机 IV  🌟🌟🌟


179. 最大数 Largest Number

给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。

注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。

示例 1:

输入:nums = [10,2]
输出:"210"

示例 2:

输入:nums = [3,30,34,5,9]
输出:"9534330"

提示:

  • 1 <= nums.length <= 100
  • 0 <= nums[i] <= 10^9

代码1: 冒泡排序

package main

import (
	"fmt"
	"strconv"
	"strings"
)

func largestNumber(nums []int) string {
	// 将整数转换成字符串
	strs := make([]string, len(nums))
	for i := 0; i < len(nums); i++ {
		strs[i] = strconv.Itoa(nums[i])
	}
	// Bubble Sort
	for i := 0; i < len(nums); i++ {
		for j := i + 1; j < len(nums); j++ {
			if strs[i]+strs[j] < strs[j]+strs[i] {
				strs[i], strs[j] = strs[j], strs[i]
			}
		}
	}
	// 处理前导0
	i := 0
	for i < len(strs) && strs[i] == "0" {
		i++
	}
	// 拼接结果
	res := strings.Join(strs[i:], "")
	if res == "" {
		return "0"
	}
	return res
}

func main() {
	nums := []int{10, 2}
	fmt.Println(largestNumber(nums))
	nums = []int{3, 30, 34, 5, 9}
	fmt.Println(largestNumber(nums))
}

代码2: 快速排序

package main

import (
	"fmt"
	"strconv"
	"strings"
)

func largestNumber(nums []int) string {
	// 将整数转换成字符串
	strs := make([]string, len(nums))
	for i := 0; i < len(nums); i++ {
		strs[i] = strconv.Itoa(nums[i])
	}
	// 定义排序函数
	var sortFn func(i, j int) bool
	sortFn = func(i, j int) bool {
		return strs[i]+strs[j] >= strs[j]+strs[i]
	}
	// 快速排序
	quickSort(strs, sortFn, 0, len(nums)-1)
	// 处理前导0
	i := 0
	for i < len(strs) && strs[i] == "0" {
		i++
	}
	// 拼接结果
	res := strings.Join(strs[i:], "")
	if res == "" {
		return "0"
	}
	return res
}

func quickSort(strs []string, sortFn func(i, j int) bool, start, end int) {
	if start >= end {
		return
	}
	pivot := partition(strs, sortFn, start, end)
	quickSort(strs, sortFn, start, pivot-1)
	quickSort(strs, sortFn, pivot+1, end)
}

func partition(strs []string, sortFn func(i, j int) bool, start, end int) int {
	i := start
	for j := start; j < end; j++ {
		if sortFn(j, end) {
			strs[i], strs[j] = strs[j], strs[i]
			i++
		}
	}
	strs[i], strs[end] = strs[end], strs[i]
	return i
}

func main() {
	nums := []int{10, 2}
	fmt.Println(largestNumber(nums))
	nums = []int{3, 30, 34, 5, 9}
	fmt.Println(largestNumber(nums))
}

代码3: 整数转字符串后排序

package main

import (
	"fmt"
	"sort"
	"strconv"
	"strings"
)

func largestNumber(nums []int) string {
	// 将整数转换成字符串
	strs := make([]string, len(nums))
	for i := 0; i < len(nums); i++ {
		strs[i] = strconv.Itoa(nums[i])
	}
	// 自定义排序函数
	sort.Slice(strs, func(i, j int) bool {
		return strs[i]+strs[j] >= strs[j]+strs[i]
	})
	// 处理前导0
	i := 0
	for i < len(strs) && strs[i] == "0" {
		i++
	}
	// 拼接结果
	res := strings.Join(strs[i:], "")
	if res == "" {
		return "0"
	}
	return res
}

func main() {
	nums := []int{10, 2}
	fmt.Println(largestNumber(nums))
	nums = []int{3, 30, 34, 5, 9}
	fmt.Println(largestNumber(nums))
}

输出:

210
9534330


187. 重复的DNA序列 Repeated DNA Sequences

DNA序列 由一系列核苷酸组成,缩写为 'A''C''G' 和 'T'.。

  • 例如,"ACGAATTCCG" 是一个 DNA序列 。

在研究 DNA 时,识别 DNA 中的重复序列非常有用。

给定一个表示 DNA序列 的字符串 s ,返回所有在 DNA 分子中出现不止一次的 长度为 10 的序列(子字符串)。你可以按 任意顺序 返回答案。

示例 1:

输入:s = "AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT"
输出:["AAAAACCCCC","CCCCCAAAAA"]

示例 2:

输入:s = "AAAAAAAAAAAAA"
输出:["AAAAAAAAAA"]

提示:

  • 0 <= s.length <= 10^5
  • s[i]=='A''C''G' or 'T'

 代码1: 哈希表

package main

import "fmt"

func findRepeatedDnaSequences(s string) []string {
	// 定义一个哈希表
	cnt := make(map[string]int)
	// 遍历s,将所有长度为10的子串出现的次数存入哈希表
	for i := 0; i <= len(s)-10; i++ {
		cnt[s[i:i+10]]++
	}
	// 找到出现次数超过1的子串即可
	res := make([]string, 0)
	for k, v := range cnt {
		if v > 1 {
			res = append(res, k)
		}
	}
	return res
}

func main() {
	s := "AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT"
	fmt.Println(findRepeatedDnaSequences(s))
	s = "AAAAAAAAAAAAA"
	fmt.Println(findRepeatedDnaSequences(s))
}

 代码2: 滑动窗口+哈希表

package main

import "fmt"

func findRepeatedDnaSequences(s string) []string {
	// 定义一个哈希表
	cnt := make(map[string]int)
	// 定义一个滑动窗口,移动长度为10
	left, right := 0, 9
	for right < len(s) {
		// 统计子串出现的次数
		cnt[s[left:right+1]]++
		left++
		right++
	}
	// 找到出现次数超过1的子串即可
	res := make([]string, 0)
	for k, v := range cnt {
		if v > 1 {
			res = append(res, k)
		}
	}
	return res
}

func main() {
	s := "AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT"
	fmt.Println(findRepeatedDnaSequences(s))
	s = "AAAAAAAAAAAAA"
	fmt.Println(findRepeatedDnaSequences(s))
}

 代码3: 位运算+哈希表

package main

import "fmt"

func findRepeatedDnaSequences(s string) []string {
	// 构造哈希表
	cnt := make(map[int]int)
	// 将 A、C、G、T 四种核苷酸转换成二进制数
	toInt := func(c byte) int {
		switch c {
		case 'A':
			return 0
		case 'C':
			return 1
		case 'G':
			return 2
		case 'T':
			return 3
		}
		return -1
	}
	// 遍历字符串,将每个长度为10的子串存入哈希表
	left := 0
	nums := make([]int, len(s))
	for i := 0; i < len(s); i++ {
		nums[i] = toInt(s[i])
		if i-left+1 > 10 {
			left++
		}
		if i-left+1 == 10 {
			// 使用位运算计算10个二进制数组成的哈希值
			hash := 0
			for j := left; j <= i; j++ {
				hash = (hash << 2) | nums[j]
			}
			cnt[hash]++
		}
	}
	// 找到出现次数大于1的子串即可
	res := make([]string, 0)
	for k, v := range cnt {
		if v > 1 {
			sub := make([]byte, 10)
			for i := 9; i >= 0; i-- {
				sub[i] = byte(k & 3)
				k >>= 2
			}
			for i := 0; i < 10; i++ {
				switch sub[i] {
				case 0:
					sub[i] = 'A'
				case 1:
					sub[i] = 'C'
				case 2:
					sub[i] = 'G'
				case 3:
					sub[i] = 'T'
				}
			}
			res = append(res, string(sub))
		}
	}
	return res
}

func main() {
	s := "AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT"
	fmt.Println(findRepeatedDnaSequences(s))
	s = "AAAAAAAAAAAAA"
	fmt.Println(findRepeatedDnaSequences(s))
}

输出:

[CCCCCAAAAA AAAAACCCCC]
[AAAAAAAAAA]


🌟 每日一练刷题专栏 🌟

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

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

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

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

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

Golang每日一练 专栏

Python每日一练 专栏

C/C++每日一练 专栏

Java每日一练 专栏

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

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

相关文章

博客管理系统--博客列表页

准备工作设计数据库封装数据库操作创建实体类数据库增删查改操作&#xff08;写法几乎很相似&#xff09;前后端交互 准备工作 博客管理系统前端部分在学习前端、css、js部分实现&#xff1b;现在我们将完成后端工作;并且部署云服务上&#xff1b;使其能让所有联网的人使用。 …

【代码】一个LVQ神经网络的详解实例

本站原创文章&#xff0c;转载请说明来自《老饼讲解-BP神经网络》bp.bbbdata.com LVQ神经网络是用于样本分类的一个常用算法&#xff0c;本文先简单回顾LVQ神经网络是什么&#xff0c;然后展示如何用matlab工具箱来训练一个LVQ神经网络 目录 一. LVQ神经网络简介 1.1 LVQ神经…

“首次公开一年连升两级的晋升大法”!

见字如面&#xff0c;我是军哥&#xff01; 今天把江湖上失传已久的技术人晋升大法分享给各位&#xff0c;据说当年雷jun总就是用了此法三年就干到了技术高管&#xff0c;请各位务必做好学习和分享动作。 说真的&#xff0c;用好这三个办法&#xff0c;就算在 IT 大厂一年都可以…

脑挫裂伤是什么?脑挫裂伤的4大症状要警惕!

脑挫裂伤是头部遭受暴力而引起的原发性脑器质性损伤。脑挫裂伤既可发生于着力点的脑组织&#xff0c;也可发生于对冲部位。脑挫裂伤病人的临床表现可以由于损伤部位&#xff0c;范围&#xff0c;程度的不同而有差异。受伤较轻的可以只有轻微的症状而受伤&#xff0c;较重的可以…

这玩意真的有用吗?对,是的!Kotlin 的 Nothing 详解

视频先行 下面是视频内容的脚本文案原稿分享。 文案原稿 Kotlin 的 Nothing 类&#xff0c;无法创建出任何实例&#xff1a; public class Nothing private constructor() 所以所有 Nothing 类型的变量或者函数&#xff0c;都找不到可用的值&#xff1a; val nothing: Nothing …

电脑视频录屏软件哪个好用 电脑视频录屏怎么录屏

录屏是我们的工作和生活中非常大的一个需求&#xff0c;尤其对于专业的视频制作者来说&#xff0c;经常需要录制屏幕和编辑视频&#xff0c;因此找到便捷好用的录屏软件非常重要。今天就来分享一下电脑视频录屏软件哪个好用&#xff0c;电脑视频录屏怎么录屏。 一、电脑视频录…

2023 年第八届数维杯大学生数学建模挑战赛 B 题 节能列车运行控制优化策略

在城市交通电气化进程快速推进的同时&#xff0c;与之相应的能耗增长和负面效应也 在迅速增加。城市轨道交通中的快速增长的能耗给城轨交通的可持续性发展带来 负担。2018 年&#xff0c;北京、上海、广州地铁负荷占全市总负荷的 1.5%-2.5%,成为了 城市电网的最大单体负荷[1]。…

软考A计划-真题-分类精讲汇总-第一章(计算机组成原理与体系结构)

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分享&am…

Java每日一练(20230512) 最大间距、串联子串、最长回文子串

目录 1. 最大间距 &#x1f31f;&#x1f31f;&#x1f31f; 2. 串联所有单词的子串 &#x1f31f;&#x1f31f;&#x1f31f; 3. 最长回文子串 &#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 …

c++ 11标准模板(STL) std::vector<bool> (二)

定义于头文件 <vector> template<class Allocator> class vector<bool, Allocator>; std::vector<bool> 是 std::vector 对类型 bool 为空间提效的特化。 std::vector<bool> 中对空间提效的行为&#xff08;以及它是否有优化&#xff09;是实现…

使用ChatGPT完成部门和个人季度工作总结

“疫后元年“2023年的第一季度即将过去&#xff0c;相信各位社会人们都过得比往年更加紧张充实吧&#xff1f;转眼又到了完成季度工作总结的时间&#xff0c;完成本职工作之余还要抽出专门的时间完成优秀的工作总结报告&#xff0c;又更让大家本不富裕的休息时间雪上加霜。那么…

SCS【24】单细胞数据量化代谢的计算方法 (scMetabolism)

桓峰基因公众号推出单细胞生信分析教程并配有视频在线教程&#xff0c;目前整理出来的相关教程目录如下&#xff1a; Topic 6. 克隆进化之 Canopy Topic 7. 克隆进化之 Cardelino Topic 8. 克隆进化之 RobustClone SCS【1】今天开启单细胞之旅&#xff0c;述说单细胞测序的前世…

Oracle Cloud和足球

Oracle除了我们熟知的数据库产品&#xff0c;它还有很多技术和产品栈&#xff0c;而且在实践层面&#xff0c;已经有了很多可借鉴的案例&#xff0c;如果了解英超的朋友&#xff0c;可以发现最近几个赛季&#xff0c;英超的转播画面图标中&#xff0c;会出现Oracle Cloud&#…

操作系统的最强入门科普(Unix/Linux篇)

大家好&#xff0c;我是小枣君。 今天这篇文章&#xff0c;我们来聊聊操作系统&#xff08;Operating System&#xff09;。 说到操作系统&#xff0c;大家都不会陌生。我们天天都在接触操作系统——用台式机或笔记本电脑&#xff0c;使用的是windows和macOS系统&#xff1b;用…

为什么拿低绩效的人从来不反思自己的原因?连公司的前90%都挤不进去,还好意思找别人的理由?...

绩效是关乎打工人切身利益的大事&#xff0c;拿了高绩效欢天喜地&#xff0c;拿了低绩效垂头丧气&#xff0c;这是人之常情&#xff0c;但最近一位字节跳动的程序员却怒斥那些拿低绩效的人&#xff1a; 为什么拿m-&#xff08;低绩效&#xff09;的人从来不反思自己垫底的原因&…

C++三部曲|C++核心思想

| 导语 C 的起源可以追溯到 40 年前&#xff0c;但它仍然是当今使用最广泛的编程语言之一&#xff0c;C发明人Bjarne Stroustrup 一开始没想到 C 会获得如此大的成功&#xff0c;他说&#xff1a;“C 的成功显然令人惊讶。我认为它的成功取决于其最初的设计目标&#xff0c;就是…

前端014_标签模块_修改功能

标签模块_修改功能 1、需求分析2、Mock 添加查询数据3、Mock 添加提交修改数据4、Api 调用接口回显数据5、提交修改后的数据6、验证1、需求分析 当点击 编辑 按钮后,弹出编辑窗口,并查询出标签信息渲染。修改后点击确定 提交修改数据。 2、Mock 添加查询数据 请求URL: /a…

在OpenCV中使用Canny边缘检测

边缘检测是非常常见和广泛使用的图像处理&#xff0c;对于许多不同的计算机视觉应用非常必要&#xff0c;如数据提取&#xff0c;图像分割&#xff0c;在更细粒度的特征提取和模式识别中。它降低了图像中的噪声和细节数量&#xff0c;但保留了图像的结构。 Python中的Canny边缘…

祁宁:社区问答是激荡企业高级智慧的头脑风暴 | 开发者说

在祁宁家里&#xff0c;有一套完整的赛车模拟器&#xff0c;他甚至还请人到国外代购了最新的 VR 设备。作为沉浸式赛车游戏发烧友&#xff0c;除了享受速度与激情带来的愉悦感&#xff0c;祁宁在玩的过程中更多的是思考如何将技术能力进行产品化的问题。 Answer.dev 就是将技术…

Studio Bot - 让 AI 帮我写 Android 代码

Google I/O 2023 不出所料&#xff0c;今年的 I/O 大会只突出了一个关键词 “AI”。Google 旗下的各类产品都成了其展示 AI 实力的舞台。连面向开发者的产品 Android Studio 也新增了 Studio bot 功能&#xff0c;希望通过 AI 帮助开发者更轻松地写代码&#xff1a; Studio Bot…