[英雄星球六月集训LeetCode解题日报] 第七日 哈希表

  • 一、 442. 数组中重复的数据
    • 1. 题目描述
    • 2. 思路分析
    • 3. 代码实现
  • 二、 2068. 检查两个字符串是否几乎相等
    • 1. 题目描述
    • 2. 思路分析
    • 3. 代码实现
  • 三、 2283. 判断一个数的数字计数是否等于数位的值
    • 1. 题目描述
    • 2. 思路分析
    • 3. 代码实现
  • 四、884. 两句话中的不常见单词
    • 1. 题目描述
    • 2. 思路分析
    • 3. 代码实现
  • 五、附每日一题 875. 爱吃香蕉的珂珂
    • 1. 题目描述
    • 2. 思路分析
    • 3. 代码实现

一、 442. 数组中重复的数据

链接: 442. 数组中重复的数据

1. 题目描述

给你一个长度为 n 的整数数组 nums ,其中 nums 的所有整数都在范围 [1, n] 内,且每个整数出现 一次 或 两次 。请你找出所有出现 两次 的整数,并以数组形式返回。

你必须设计并实现一个时间复杂度为 O(n) 且仅使用常量额外空间的算法解决此问题。

2. 思路分析

其实哈希计数很简单,但是题目要求空间复杂度O(1)。
因此可以原地哈希,把每个数放到对应的位置:
每次操作把本位置的数换出去,如果换进来的数不对,继续换出去。
这样每次都能至少让一个数在正确位置。

3. 代码实现

class Solution:def findDuplicates(self, nums: List[int]) -> List[int]:n = len(nums)for i in range(n):         while nums[i]  != nums[nums[i] - 1] :nums[nums[i] - 1], nums[i] = nums[i], nums[nums[i] - 1]return [nums[i] for i in range(n) if nums[i]-1 != i]

二、 2068. 检查两个字符串是否几乎相等

链接: 2068. 检查两个字符串是否几乎相等

1. 题目描述

如果两个字符串 word1 和 word2 中从 ‘a’ 到 ‘z’ 每一个字母出现频率之差都 不超过 3 ,那么我们称这两个字符串 word1 和 word2 几乎相等 。

给你两个长度都为 n 的字符串 word1 和 word2 ,如果 word1 和 word2 几乎相等 ,请你返回 true ,否则返回 false 。

一个字母 x 的出现 频率 指的是它在字符串中出现的次数。

2. 思路分析

计数比较就行。

3. 代码实现

class Solution:def checkAlmostEquivalent(self, word1: str, word2: str) -> bool:c1,c2 = Counter(word1),Counter(word2)for c,v in c1.items():if abs(v-c2.get(c,0)) >3:return Falsefor c,v in c2.items():if abs(v-c1.get(c,0)) >3:return Falsereturn True

三、 2283. 判断一个数的数字计数是否等于数位的值

链接: 2283. 判断一个数的数字计数是否等于数位的值

1. 题目描述

给你一个下标从 0 开始长度为 n 的字符串 num ,它只包含数字。

如果对于 每个 0 <= i < n 的下标 i ,都满足数位 i 在 num 中出现了 num[i]次,那么请你返回 true ,否则返回 false 。

2. 思路分析

这题主要是类型转换要注意。

3. 代码实现

class Solution:def digitCount(self, num: str) -> bool:cnt = Counter(num)# 注意类型转换return all(int(num[i]) == cnt.get(str(i), 0) for i in range(len(num)))

四、884. 两句话中的不常见单词

链接: 884. 两句话中的不常见单词

1. 题目描述

句子 是一串由空格分隔的单词。每个 单词 仅由小写字母组成。

如果某个单词在其中一个句子中恰好出现一次,在另一个句子中却 没有出现 ,那么这个单词就是 不常见的 。

给你两个 句子 s1 和 s2 ,返回所有 不常用单词 的列表。返回列表中单词可以按 任意顺序 组织。

2. 思路分析

直接在两个一起计数,找频次1的。

3. 代码实现

class Solution:def uncommonFromSentences(self, s1: str, s2: str) -> List[str]:return [x for x,v in Counter(s1.split(' ') + s2.split(' ')).items() if v == 1]

五、附每日一题 875. 爱吃香蕉的珂珂

链接: 875. 爱吃香蕉的珂珂

1. 题目描述

珂珂喜欢吃香蕉。这里有 n 堆香蕉,第 i 堆中有 piles[i] 根香蕉。警卫已经离开了,将在 h 小时后回来。

珂珂可以决定她吃香蕉的速度 k (单位:根/小时)。每个小时,她将会选择一堆香蕉,从中吃掉 k 根。如果这堆香蕉少于 k 根,她将吃掉这堆的所有香蕉,然后这一小时内不会再吃更多的香蕉。

珂珂喜欢慢慢吃,但仍然想在警卫回来前吃掉所有的香蕉。

返回她可以在 h 小时内吃掉所有香蕉的最小速度 k(k 为整数)。

2. 思路分析

速度快了就会时间短,速度慢了就时间长,要求时间不能超过h。因此可以二分。
二分上下界:[1,max(piles)]。
python的bisect参数要好好理解。
只能升序搜,key参数是指原数组每个数经过key计算后,第一个不大于 指定数据(-h)的数。
这里因为k和计算式的结果大小是相反的,所以加负号。
返回值是下标,因此range从0开始,这样可以让下标=值,但搜索下限指定为1。

3. 代码实现

# class Solution:
#     def minEatingSpeed(self, piles: List[int], h: int) -> int:
#         a = range(1,+1)
#         ans = max(piles)+1
#         l,r = 1, ans
#         m = (l+r) // 2
#         while l<r:
#             m = (l+r) // 2
#             s = sum([ceil(x/m) for x in piles])
#             # print(l,r,m,s,h)
#             # if s == h:
#             #     return m
#             if s > h:
#                 l = m+1
#             elif s <= h:
#                 ans = min(ans,m)
#                 r = m #         return ansclass Solution:def minEatingSpeed(self, piles: List[int], h: int) -> int:return bisect_left(range(0,max(piles)+1), -h, lo=1, key=lambda k: -sum([ceil(x/k) for x in piles]))

[英雄星球六月集训LeetCode解题日报] 第七日 哈希表相关推荐

  1. [英雄星球六月集训LeetCode解题日报] 第五日 双指针

    [英雄星球六月集训LeetCode解题日报] 第五日 双指针 一. 2000. 反转单词前缀 1. 题目描述 2. 思路分析 3. 代码实现 二. 917. 仅仅反转字母 1. 题目描述 2. 思路分 ...

  2. 【英雄算法六月集训】总结

    [英雄算法六月集训]总结 一 前言 英雄哥一个认真又搞笑的人,做的视频也特别有趣,每天早上起床看他直播,一整天的好精神.原先我个人生物钟是6点半,为了听他的直播调整到了5点.早起学习,确实效率比晚上下 ...

  3. leetcode - 141. 环形链表(哈希表)

    给定一个链表,判断链表中是否有环. 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始). 如果 pos 是 -1,则在该链表中没有环. 示例 1: 输入: ...

  4. LeetCode 136. Single Number【哈希表/位运算/数学】简单

    本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12.由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止:由于LeetCode还在不断地创建新 ...

  5. [leetcode]1.两数之和 + 哈希表:梦开始的地方,英语的abandon

    方案一:暴力题解没什么可说的,当然不是面试官想看到的 复杂度分析 时间复杂度:O(N^2),其中 N是数组中的元素数量.最坏情况下数组中任意两个数都要被匹配一次.空间复杂度:O(1). 方案二:直白来 ...

  6. LeetCode 202. 快乐数【哈希表】

    202. 快乐数 编写一个算法来判断一个数 n 是不是快乐数. 「快乐数」 定义为: 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和. 然后重复这个过程直到这个数变为 1,也可能是 无限 ...

  7. LeetCode 890. 查找和替换模式(哈希表)

    1. 题目 你有一个单词列表 words 和一个模式 pattern,你想知道 words 中的哪些单词与模式匹配. 如果存在字母的排列 p ,使得将模式中的每个字母 x 替换为 p(x) 之后,我们 ...

  8. 六月集训(第17天) —— 广度优先搜索

    前言 此为<英雄算法联盟:算法集训>的内容,具体内容详见:知识星球:英雄算法联盟 - 六月集训.加入星球后,即可享用星主 CSDN付费专栏 免费阅读 的权益.         欢迎大家积极 ...

  9. 六月集训(第21天) —— 堆(优先队列)

    前言 此为<英雄算法联盟:算法集训>的内容,具体内容详见:知识星球:英雄算法联盟 - 六月集训.加入星球后,即可享用星主 CSDN付费专栏 免费阅读 的权益.         欢迎大家积极 ...

最新文章

  1. 飞桨博士会第三期来啦!中国深度学习技术俱乐部诚邀您加入
  2. bat 重启资源管理器
  3. Servlet和HTTP请求协议-学习笔记02【Servlet_体系结构与urlpartten配置、HTTP请求协议】
  4. 建立SQL Server警告和给操作员发送email通知
  5. bzoj 1996: [Hnoi2010]chorus 合唱队
  6. html5移动端制作知识点总结
  7. 设计一款知识性产品需要考虑十二个基本问题
  8. java学习笔记(5)
  9. 太阳能光伏发电行业将重入佳境
  10. SuperMap 办公自动化服务平台
  11. 代码审查工具Sonar下载、安装、使用
  12. 程序员教程第五版笔记
  13. 北斗一号卫星授时技术及在电力系统中的应用
  14. 简单的CSS3动画案例——奔跑的熊哥
  15. ETR获取转速及PID调节原则
  16. keypair java_Java KeyPairGenerator genKeyPair()用法及代码示例
  17. LaTex(Texshop)的入门(一)(此篇有关中字字符的编译,格式的初步编排)
  18. gearman的安装
  19. 百厨盛达厨房设备中心:乐信万能蒸烤箱适合做什么菜
  20. 远程桌面鼠标键盘映射问题

热门文章

  1. codeforces 298B Sail
  2. Scrapy-Splash爬取淘宝排行榜(二)
  3. 【2021】网络协议从入门到底层原理-MJ【新】附上下载链接
  4. AI矩形描边内外同时设置,居中对齐
  5. python制作购物网站_django搭建简单购物网站(功能不完整)
  6. [转载]性能测试中TPS和并发用户数估算
  7. openwrt 编程器固件制作方法
  8. hdl_localization代码解析
  9. C语言打印矩形、长方形、平行四边形、各种三角形
  10. 3ds Max 实验十二 材质的种类