首页 > 其他分享 >[代码随想录]Day05-哈希表 part01

[代码随想录]Day05-哈希表 part01

时间:2023-07-31 21:13:28浏览次数:39  
标签:return part01 res 代码 随想录 isExist int 哈希

题目:242. 有效的字母异位词

思路:

很简单,就是看两个字符串每个字母出现的次数是不是相同的。

可以用两个数组来比较,也可以用一个数组比较。

代码:

一个数组

func isAnagram(s string, t string) bool {
    isExist := [26]int{} // 26个字母
    for _, ch := range s {
       isExist[ch-'a']++  // 存一遍每个字母出现的次数
    }
    for _, ch := range t {
        isExist[ch-'a']-- // 出现就-1
    }
    for i := 0; i < 26; i++ { // 如果s和t是异位词那么26个位置都是0
        if isExist[i] != 0 {
            return false
        }
    }
    return true
}

参考:

代码随想录

题目:349. 两个数组的交集

思路:

和上面题思路大致一样,都是一个先跑一遍记录,另一个再跑一遍找结果。

值得注意的一点是结果不能有重复,这样的话通过delete删除map的节点来实现不会有重复的数据,这是这个题目学到的最重要的一点了。

代码:

func intersection(nums1 []int, nums2 []int) []int {
    res := []int{}
    maps := make(map[int]bool, 0)
    for _, k := range nums1 { // 存一遍
        maps[k] = true
    } 
    for _, k := range nums2 { 
        if _, ok := maps[k] ; ok { // 都有
            res = append(res, k) // 添加到答案
            delete(maps, k)  // 删除map的key-value
        }
    }
    return res
}

参考:

代码随想录

题目:202. 快乐数

思路:

关键一个点,如果出现不了1就会出现循环,也就是相同的数会第二次出现,那么如果出现了两次相同的数据就直接false。

之后就是不断计算就好了。

代码:

func isHappy(n int) bool {
    isExist := make(map[int]bool, 0)
    for {
        if n == 1 { 
            return true
        }
        if _, ok := isExist[n]; ok { // 如果开始循环了就退出
            break
        }
        isExist[n] = true // 标记已经出现过了
        n = calc(n) // 数据处理
    }
    return false
}

func calc(x int) (res int) { // 进行数据处理的函数
    for x != 0 {
        tmp := x % 10
        res += tmp * tmp
        x /= 10
    }
    return
}

参考:

代码随想录

题目:1. 两数之和

思路:

假设a + b = target,target我们知道了,那如果我们知道了a,那b = target - a;也就是说当我们遍历到了a(已知a),就可以通过target - a去查询是否出现了b,如果b已经存在了,那么就返回结果[]int{a,b}即可。

代码:

func twoSum(nums []int, target int) []int {
    isExist := make(map[int]int, 0) 
    for i := 0; i < len(nums); i++ {
        if v, ok := isExist[target-nums[i]]; ok { // 判断是否出现了
            return []int{v,i}
        }
        isExist[nums[i]] = i
    }
    return []int{}
}

参考:

代码随想录

标签:return,part01,res,代码,随想录,isExist,int,哈希
From: https://www.cnblogs.com/wtcsky/p/17594493.html

相关文章

  • 代码随想录-哈希表-c++总结
    哈希表内容整体简单,关键是要有利用map映射的思想,以及巩固一些c++标准库的操作这次三数之和一题没有直接做出来,关键在于如何查重一点比较绕15.三数之和-力扣(LeetCode)利用排序+双指针解决三数之和的思路更加清楚此外,四数之和中,四个数相加会溢出int,应改为 ......
  • 代码随想录第四天|力扣24.两两交换链表节点、力扣19.删除链表的倒数第N个结点、力扣面
    两两交换链表中的节点(力扣24.)dummyhead.next=head;cur=dummyhead;while(cur.next!=null&&cur.next.next!=null)temp=cur.next;temp1=cur.next.next.next;cur.next=cur.next.next;cur.next.next=temp;temp.next=temp1;cur=cur.next.next;returndummyhead.n......
  • 代码随想录算法训练营第四天| LeetCode 24. 两两交换链表中的节点 19.删除链表的倒
    24.两两交换链表中的节点     卡哥建议:用虚拟头结点,这样会方便很多。 本题链表操作就比较复杂了,建议大家先看视频,视频里我讲解了注意事项,为什么需要temp保存临时节点。   题目链接/文章讲解/视频讲解:https://programmercarl.com/0024.%E4%B8%A4%E4%B8%A4%E4%BA%......
  • 哈希函数如何工作 ?
    动动发财的小手,点个赞吧!作为一名程序员,您每天都会使用哈希函数。它们在数据库中用于优化查询,在数据结构中用于使速度更快,在安全性中用于保证数据安全。几乎每次与技术的交互都会以某种方式涉及哈希函数。哈希函数是基础函数,而且无处不在。但什么是哈希函数,它们如何工作?在这篇文......
  • 代码随想录算法训练营第三天|力扣203.移除链表元素、力扣707.设计链表、力扣206.反转
    链表定义:通过指针串联在一起的线性结构,每一个节点由两个部分组成:数据域和指针域(存放指向下一个节点的指针),最后一个节点的指针域指向null,即为空指针。链表类型1.单链表2.双链表3.循环链表,即链表首尾相连,可以解决约瑟夫环问题链表的存储方式数组在内存中是连续分布的,......
  • [代码随想录]Day04-链表part02
    题目:24.两两交换链表中的节点思路:首先给他加一个虚拟头结点,然后思考反转的逻辑,这是每两个为一组,比如1,2是一组、3,4是一组,如果说1,2一组2,3一组就变成了链表的逆转了。那么指针的逻辑是:两个指针一个r指向要交换的二元组的第一个节点一个l指向前一个节点二元组的第二个节......
  • [代码随想录]Day03-链表part01
    题目:203.移除链表元素思路:做链表首先最好有个虚拟头指针,这样做删除添加操作的时候可以统一操作否则还得特判。那删除元素的过程,从虚拟头指针开始要做以下几步:如果当前p的next不为空,那么就可以进行判断如果p的next的值是val(↑p的next不为空↑),那么就把p的next修改为p的下......
  • 代码随想录算法训练营第三天| LeetCode 203.移除链表元素(同时也对整个单链表进行增删
    203.移除链表元素      题目链接/文章讲解/视频讲解::https://programmercarl.com/0203.%E7%A7%BB%E9%99%A4%E9%93%BE%E8%A1%A8%E5%85%83%E7%B4%A0.html    卡哥题目建议:本题最关键是要理解虚拟头结点的使用技巧,这个对链表题目很重要。   做题思路:   ......
  • 【算法】哈希学习笔记
    1.哈希(hash)简介1.1前言又来写算法总结了qwq。今天是2023/7/8,期末考试已经考完了。初二下注定是一个煎熬的学期,所以我在这一学期并没有学什么新算法,OI也没什么长进。但倒是深造了几个算法,比如:dp,hash,线段树。之前一直想写一篇hash的学习笔记,但由于种种原因,并没有写成。于......
  • 41. 缺失的第一个正数(原地哈希)
    给你一个未排序的整数数组nums,请你找出其中没有出现的最小的正整数。请你实现时间复杂度为O(n)并且只使用常数级别额外空间的解决方案。示例1:输入:nums=[1,2,0]输出:3>思路原地哈希就相当于,让每个数字n都回到下标为n-1的家里。而那些没有回到家里的就成了孤魂野鬼......