leetcode——哈希表简单题 C语言

leetcode——哈希表简单题 C语言,第1张

一 、数组中重复的数据

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

/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* findDuplicates(int* nums, int numsSize, int* returnSize){
    int *p=(int *)malloc(sizeof(int)*numsSize);
    int hash[100001];
    memset(hash,0,sizeof(hash));
    for(int i=0;i

思路:用一个哈希表 记录每个元素的出现次数,然后再将次数为2的拿出.比较简单.

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

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

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

输入:num = "1210"
输出:true
解释:
num[0] = '1' 。数字 0 在 num 中出现了一次。
num[1] = '2' 。数字 1 在 num 中出现了两次。
num[2] = '1' 。数字 2 在 num 中出现了一次。
num[3] = '0' 。数字 3 在 num 中出现了零次。
"1210" 满足题目要求条件,所以返回 true 。
bool digitCount(char * num){
    int hash[100];
    memset(hash,0,sizeof(hash));
    for(int i=0;i

思路 “建立一个哈希表记录元素的个数,再遍历如果表中出现的次数不等于num[i]-'0'  那么返回false.否则返回true.

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

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

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

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

bool checkAlmostEquivalent(char * word1, char * word2){
    int hash[101];
    memset(hash,0,sizeof(hash));
    for(int i=0;i3 || hash[j]<-3) return false; 
    }
    return true;
}

思路:将两个数组都放进哈希表 一个加 一个减 只要有 出现大于3 小于-3 的那么就返回 false,

否则返回 true.

还差一道题  我哈希不懂    看了官方题解 我也一脸懵....等会了c++ 再来做.

来自 英雄哪里出来 的指导.

题来自leetcode

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1325736.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-12
下一篇 2022-06-12

发表评论

登录后才能评论

评论列表(0条)