一 、数组中重复的数据
给你一个长度为 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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)