二十天刷leetcode【hot100】算法- day1[后端golang]

news2024/9/23 17:21:49

哈希表

其他语言版本

ts-day1
js-day1
python-day1

1. 两数之和

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。
在这里插入图片描述

链接

题解

该题目的关键在于遍历循环数组,在遍历的过程中,记录目前值与target的差值,且使用map记录差值情况,若存在差值,则直接返回差值

package main  

import (  
    "fmt"  
)  

func twoSum(nums []int, target int) []int {  
    hashMap := make(map[int]int)  
    for i, num := range nums {  
        // 计算当前值与target的差值  
        complement := target - num  
        // 检查差值是否已经在map中  
        if j, found := hashMap[complement]; found {  
            // 如果存在该差值,则直接返回[差值对应的下标, 当前值的下标]  
            return []int{j, i}  
        }  
        // 暂时不存在差值,存入当前值的下标  
        hashMap[num] = i  
    }  
    // 如果没有找到任何符合条件的两个数,这里通常应该返回一个错误或空切片,而不是[0, 0]  
    // 但为了与原始JavaScript函数保持一致,我们返回[0, 0](在实际应用中,这可能不是一个好做法)  
    return []int{0, 0}  
}  

func main() {  
    arr := twoSum([]int{3, 2, 4}, 6)  
    fmt.Println(arr) // 输出: [1 2]  
}

2. 字母异位词分组

给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。

字母异位词 是由重新排列源单词的所有字母得到的一个新单词。
在这里插入图片描述

链接

题解

该题目在于将每一项数据根据Unicode编码排序,异位词经过排序后的字符串会相等,后使用map记录数据即可。

package main  

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

func groupAnagrams(strs []string) [][]string {  
	// 使用map来存储排序后的字符串作为键,以及一个字符串切片作为值  
	anagramMap := make(map[string][]string)  

	for _, str := range strs {
		// 将字符串转换为字符切片,排序,然后再转换回字符串  
		chars := strings.Split(str, "")  
		sort.Strings(chars)  
		sortedStr := strings.Join(chars, "")  

		// 检查map中是否已存在该排序后的字符串  
		if _, ok := anagramMap[sortedStr]; !ok {  
			// 如果不存在,则初始化一个新的切片  
			anagramMap[sortedStr] = []string{}  
		}  
		// 将原始字符串添加到对应的切片中  
		anagramMap[sortedStr] = append(anagramMap[sortedStr], str)  
	}  

	// 提取map中的所有值,并转换为二维切片  
	var result [][]string  
	for _, value := range anagramMap {  
		result = append(result, value)  
	}  

	return result  
}  

func main() {  
	strs := []string{"abc", "cab", "de", "ed"}  
	result := groupAnagrams(strs)  
	fmt.Println(result) // 输出: [[abc cab] [de ed]]  

}

3.最长连续序列

给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。

请你设计并实现时间复杂度为 O(n) 的算法解决此问题。
在这里插入图片描述
链接

题解:

在这里插入图片描述

package main  

import (  
    "fmt"  
)  

func longestConsecutive(nums []int) int {  
    // 使用map来模拟集合,存储数组中的唯一元素  
    numSet := make(map[int]bool)  
    for _, num := range nums {  
        numSet[num] = true  
    }  

    longestStreak := 0  

    for num := range numSet {  
        // 如果num-1不在集合中,那么num可能是连续序列的起点  
        if !numSet[num-1] {  
            currentNum := num  
            currentStreak := 1  

            // 查找当前连续序列的长度  
            for numSet[currentNum+1] {  
                currentNum++  
                currentStreak++  
            }  

            // 更新最长连续序列的长度  
            if currentStreak > longestStreak {  
                longestStreak = currentStreak  
            }  
        }  
    }  

    return longestStreak  
}  

func main() {  
    nums := []int{100, 4, 4, 200, 1, 3, 2}  
    fmt.Println(longestConsecutive(nums)) // 输出: 4  
}

指针

4.移动零

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。

请注意 ,必须在不复制数组的情况下原地对数组进行操作。
在这里插入图片描述

链接

题解

在这里插入图片描述

package main  

import (  
    "fmt"  
)  

func moveZeroes(nums []int) []int {  
    if len(nums) == 1 {  
        return nums  
    }  
    left := 0  
    for right := 0; right < len(nums); right++ {  
        if nums[right] != 0 {  
            // 如果右边的元素不是0,并且左边的元素是0,则交换它们  
            if nums[left] == 0 {  
                nums[left], nums[right] = nums[right], nums[left]  
            }  
            // 将左指针向右移动  
            left++  
        }  
    }  
    return nums  
}  

func main() {  
    arr := []int{0, 1, 0, 3, 12}  
    moveZeroes(arr)  
    fmt.Println(arr) // 输出: [1 3 12 0 0]  
}

5.盛水最多的容器

给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。

找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量。

说明:你不能倾斜容器。
在这里插入图片描述

链接

题解

左右指针法,每次移动短的指针能才有机会使容纳的水变多,因为左右指针收窄时,形成的容器的底是变小的,而能存多少水,容器的高也是一个决定性因素,根据木桶原理,短的木板决定水桶能装多少水,在底变小的情况下,移动短的指针有机会遇到更长的木板,使得容积变大。移动过程中,更新最大值即可。

package main  

import (  
 "fmt"  
)  

func maxArea(height []int) int {  
 	left := 0  
	right := len(height) - 1  
	result := 0  

	for left < right {  
		// 底  
		bottom := right - left  
		// 高  
		h := min(height[left], height[right])  
		// 更新最大值  
		if area := bottom * h; area > result {  
			result = area  
		}  
		// 根据两边的高度来决定移动哪一边  
		if height[left] > height[right] {  
			right--  
		} else {  
			left++  
		}  
	}  

	return result  
}  

// 辅助函数,返回两个整数中的较小值  
func min(a, b int) int {  
	if a < b {  
		return a  
	}  
	return b  
}  

func main() {  
	nums := []int{1, 8, 6, 2, 5, 4, 8, 3, 7}  
	num := maxArea(nums)  
	fmt.Println(num) // 输出: 49  
}

关注我的公众号,回复 100905A1 获取hot100算法在线链接
在这里插入图片描述

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

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

相关文章

ue5 打开关卡,未正常加载地形及物品。资产必须放在content目录下

1.资产必须放在content目录下 2.要把A拿到B去用&#xff0c;必须使用资产迁移&#xff0c;不可直接拷贝&#xff0c;因为有依赖文件

Qt 学习第四天:信号和槽机制(核心特征)

信号和槽的简介 信号和插槽用于对象之间的通信。信号和插槽机制是Qt的核心特征&#xff0c;可能是不同的部分大部分来自其他框架提供的特性。信号和槽是由Qt的元对象系统实现的。介绍&#xff08;来自Qt帮助文档Signals & Slots&#xff09; 在GUI编程中&#xff0c;当我们…

安装sqllab靶机之后,练习关卡报403 forbidden

解决办法&#xff1a; 在nginx的conf文件中添加上访问index.php vim /usr/local/nginx/conf/nginx.conf 保存退出 再重启一下nginx&#xff0c;就完成了。 ./nginx -s reload

中国AI大模型场景探索及产业应用调研报告

AI大模型发展态势 定义 AI大模型是指在机器学习和深度学习领域中&#xff0c;采用大规模参数(至少在一亿个以上)的神经网络模型&#xff0c;AI大模型在训练过程中需要使用大量的算力和高质量的数据资源。 产业规模 2023年&#xff0c;中国大模型市场规模为147亿。结合《202…

python pip怎么安装包

按WinR键打开运行窗口&#xff0c;输入“cmd”&#xff0c;再按回车键&#xff0c;打开命令行窗口。 找到pip安装路径。 Python2/Python3安装路径是相同的&#xff0c;都在x:\Python xx\Scripts路径下。 拖动pip主应用程序到命令行窗口。 输入“install 模块/包名”&#xff…

Ubuntu22.04之VirtualBox7.0.18安装Win10无法启用增强功能问题(二百六十五)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 新书发布&#xff1a;《Android系统多媒体进阶实战》&#x1f680; 优质专栏&#xff1a; Audio工程师进阶系列…

优盘驱动器未格式化:数据拯救行动指南

优盘困境&#xff1a;驱动器未格式化的挑战 在日常的数据存储与传输中&#xff0c;优盘以其便携性和高容量成为了我们不可或缺的伙伴。然而&#xff0c;当您尝试访问优盘时&#xff0c;突然弹出的“驱动器未被格式化”提示却如同晴天霹雳&#xff0c;让人措手不及。这一状况不…

AI写作|告诉你CoT的几个简单步骤,使用后大幅提升AI的推理能力

随着对 AI 不断了解&#xff0c;我深切体会到一个高效的提示词有多重要。希望这篇能给不会写高效提示词的朋友一些思路&#xff0c;让你能更顺手地使用 AI。 什么是思考链 (CoT) 思考链&#xff08;Chain of Thought&#xff0c;简称 CoT&#xff09;是一种推理策略&#xff0c…

Git代码冲突怎么处理?

我们在使用Git时难免会出现代码冲突的问题&#xff0c;出现冲突的原因是因为当本地文件的版本与目标分支中文件的版本不一致时当存在同一行的内容不同时在进行合并时会出现冲突。 代码冲突一般发生在以下情况: 1、多个分支向主分支合并时 2、同一个分支下pull或push操作时。 为…

python 可视化探索(四):电商数据可视化案例

总结&#xff1a;本文为和鲸python 可视化探索训练营资料整理而来&#xff0c;加入了自己的理解&#xff08;by GPT4o&#xff09; 注意跟练题目3中提到的多种数据替换方式&#xff0c;非常值得学习&#xff01;&#xff01; 原作者&#xff1a;作者&#xff1a;大话数据分析…

【人工智能专栏】Focal Loss 可以平衡简单样本和困难样本(或大量样本和少量样本)的学习

Focal Loss 理念 Focal loss 可以 平衡简单样本和困难样本(或大量样本和少量样本)的学习 。在遇到样本不同类别之间学习难度相差很大(比如区分飞机、摩托车和自行车,飞机的特征明显与后两者更易区分,可以用混淆矩阵看出来),或者样本数量相差很多时(飞机有 1k 个样本,…

智联招聘岗位数据采集攻略:五步走,轻松搞定职位信息

摘要&#xff1a; 本文将手把手教你利用Python编写一个轻量级的智联招聘岗位信息采集器&#xff0c;无需复杂工具&#xff0c;仅需五步&#xff0c;即可实现高效职位信息抓取。通过实战演练&#xff0c;你将掌握网络爬虫基础、请求处理、解析技术及数据清洗技巧&#xff0c;助…

【29】Android之学习native开发(一)

一、概述 没什么好讲的了&#xff0c;Android学习成长过程必经之路就是了解Framework层的源码及原理&#xff0c;在跟踪流程过程中&#xff0c;难免遇到很多natvie函数&#xff0c;这个时候学习native能帮助我们更轻松的读懂这方便的代码。 这篇文章也会从最基础的东西开始讲…

Towards Self-supervised Learning on Graphs with Heterophily

推荐指数: #paper/⭐ 发表于: CIKM22 一句话总结:本文通过重构相似性矩阵来生成两种特征增强方法.通过对比学习来进行训练.值得一题的一点是他在对比学习中,用了X得到的特征和AX的对比.还是有一丢丢创新性的 主要工作: 图增强 特征相似矩阵 S ~ i j F cos ⁡ ( x i , x j )…

数据结构与算法--队列

文章目录 提要队列的定义队列的认识队列的应用队列的抽象数据类型队列的存储结构队列的链式存储结构与实现链队的进队和出队操作链队的数据类型初始化链队列入队操作出队操作队列的顺序存储结构与实现顺序队列的假溢出问题队列上溢循环队列循环队列取下一相邻单元下标运算队满与…

U盘数据丢失?一招教你如何使用四种技巧轻松找回!

每一个打工人可能都是被各种文件所困扰的&#xff0c;而且现在不仅仅是工作上&#xff0c;还有学习以及日常的生活记录也需要接触到各类的数据&#xff0c;拿我们平时用软件时产生的文件、图片、视频等等来说&#xff0c;就占据了磁盘的大部分空间&#xff0c;当然有时候也会选…

让玄学可靠:构建复杂 LLM 应用

ChatGPT 从 2023 年一月份爆火&#xff0c;到了六月份热度下降&#xff0c;大量的 Chat 应用昙花一现&#xff0c;很多人又开始讨论——大模型到底能解决什么问题&#xff1f;过去太多的焦点给到了 ChatGPT&#xff0c;让大家以为 AI ChatGPT&#xff0c;而忽略了背后的 LLM。…

作业练习1

要求&#xff1a;R1-R2-R3-R4-R5 RIP 100 运行版本2 R6-R7 RIP 200 运行版本1 1.使用合理IP地址规划网络&#xff0c;各自创建环回接口 2.R1创建环回 172.16.1.1/24 172.16.2.1/24 172.16.3.1/24 3.要求R3使用R2访问R1环回 4.减少路由条目数量&#xff0c;R1-R2之间增加路由传递…

vLLM初识(一)

vLLM初识&#xff08;一&#xff09; 前言 在LLM推理优化——KV Cache篇&#xff08;百倍提速&#xff09;中&#xff0c;我们已经介绍了KV Cache技术的原理&#xff0c;从中我们可以知道&#xff0c;KV Cache本质是空间换时间的技术&#xff0c;对于大型模型和长序列&#xf…

MyBatis动态代理和映射器

目录 1、映射器简介 &#xff08;1&#xff09;什么是mapper动态代理&#xff1f; &#xff08;2&#xff09;动态代理的规范 &#xff08;3&#xff09;如何使用动态代理 &#xff08;4&#xff09;为什么学映射器 &#xff08;5&#xff09;映射器与接口 &#xff08;…