首页 > 编程语言 >算法练习-第六天【哈希表】

算法练习-第六天【哈希表】

时间:2022-09-28 00:22:54浏览次数:70  
标签:ch return 数组 int range 第六天 算法 哈希

哈希表(二)

454.四数相加 II

参考:代码随想录454.四数相加

思路

题目中给出了四个长度相同数组,并且要求求出组成结果为0的四元组。答案可以包含重复的四元组。

  1. 先使用哈希表 key存储数组1和数组2的2个数之和,value存储数组1和数组2的2个数之和出现的次数
  2. 遍历数组3和数组4在哈希表中找到key为-(num3+num4),如果可以在哈希表中找到,那么就在返回结果上加上value次。
func fourSumCount(nums1 []int, nums2 []int, nums3 []int, nums4 []int) int {
	m := map[int]int{}
	for _, num1 := range nums1 {
		for _, num2 := range nums2 {
			m[num1+num2]++
		}
	}
	rlt := 0
	for _, num3 := range nums3 {
		for _, num4 := range nums4 {
			rlt += m[-num3-num4]
		}
	}

	return rlt
}

本题总结

很容易的一道题,使用哈希表可以显著的降低时间复杂度。

383.赎金信

参考:代码随想录383.赎金信

看完题目的第一想法

题目判断第一个字符串ransomNote能否由magazine构成。而且组成的字符只能使用一次。

func canConstruct(ransomNote string, magazine string) bool {
	m := make(map[rune]int)
	for _, ch := range magazine {
		m[ch]++
	}

	for _, ch := range ransomNote {
		m[ch]--
		if v, ok := m[ch]; ok && v < 0 {
			return false
		}
	}

	return true
}

优化

func canConstruct(ransomNote string, magazine string) bool {
	record := [26]int{}
	for _, ch := range magazine {
		record[ch-'a']++
	}

	for _, ch := range ransomNote {
		record[ch-'a']--
		if record[ch-'a'] < 0 {
			return false
		}
	}

	return true
}

本题总结

与242.有效的字母异位词类似的一道题,做起来没有什么难度。可以使用数组代替哈希表。

未完待续。。

标签:ch,return,数组,int,range,第六天,算法,哈希
From: https://www.cnblogs.com/neilliu/p/16736462.html

相关文章

  • 前端加密算法之MD5
    1、简介1.1、隶属于单向加密算法1.2、不可逆的加密算法、不能从密文反推出明文,除非做碰撞测试1.3、一种摘要算法、哈希算法、散列算法(通过一个函数,把任意......
  • 前端加密算法之RSA
    1、简介RSA为非对称加密算法,即加密解密密钥不一致,公私钥成对出现。一般而言,公钥是公开的,在前端页面我们都是可以看到的,而私钥则是不公开的,用于在后端对前端发来的密......
  • 算法设计与分析课-实验-贪心
    算法设计与分析课贪心算法第一题最小延迟调度:贪心算法的基本思想:贪心算法的基本思想为从整体中找到每个小局部的最优解,并将所有局部最优解合并成整体的最优解。能够......
  • mitudesk的机器学习日记 基础算法之K最近邻
    1.K最近邻的思路很简单,就是计算其离最近的比较其所属,最少需要两个不同的标签,最多无上限,当N太小时会存在过拟合的情况,会受到极小的点的印象当n太大,以至于超过待分类的数据,......
  • 基2时间抽取FFT算法推导,及C语言实现
    https://blog.csdn.net/qq_38677310/article/details/99663883 https://wenku.baidu.com/view/af198ef01a5f312b3169a45177232f60ddcce77d.html......
  • Golang-常用算法
    快速排序funcQuickSort(sort[]int)[]int{ iflen(sort)<=1{ returnsort } low:=make([]int,0,0) mid:=make([]int,0,0) high:=make([]int,0,0......
  • AcWing 算法提高课 线段树+扫描线法 求矩形之并的面积
    例题:求解多个长方形之并的面积https://www.acwing.com/problem/content/249/蓝色表示长方形,红色表示扫描线如下图所示,对于每一个横向的区间,在纵向维护线段树根据纵向......
  • 前端加密算法之CBC-AES
    1、简介CBC模式的AES加密相比较于ECB模式,多了一个偏移量,所以安全性要比ECB模式高2、核心加密js注:和前篇ECB模式一样这里都是直接采用调用js的方式实现了加密,当......
  • 暴力匹配算法、KMP算法
    应用实例暴力匹配算法代码实现publicclassViolenceMatch{ publicstaticvoidmain(String[]args){ //测试暴力匹配算法 Stringstr1="硅硅谷......
  • MD5 加密算法 All In One
    MD5加密算法AllInOneMD5算法是Hash算法的一种,叫做讯息摘要算法Message-DigestAlgorithm/消息摘要算法https://zh.wikipedia.org/wiki/MD5https://en.wikipe......