一、242 有效的字母异位词
bool isAnagram(char* s, char* t) {
int hash[26]={0};//定义一个hash数组,用于存放26个英文字母,全部标记为0
for(int i=0;i<strlen(s);i++){//将s中出现的字母的个数存入数组
hash[s[i]-'a']++;//记录出现次数
}
for(int i=0;i<strlen(t);i++){//将t中出现的字母的个数存入数组
hash[t[i]-'a']--;//将和s一样的字母去除
}
for(int i=0;i<26;i++){//遍历整个数组,若数组不全为0,则不是字母异位词
if(hash[i] != 0)
return false;
}
return true;
}
二、349 两个数组的交集
int* intersection(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize) {
int hash[1001]={0};//创建一个哈希数组存放数组1中出现的数字
int resultsize = nums1Size<nums2Size?nums1Size:nums2Size;
int *result = (int*)calloc(resultsize,sizeof(int));//将两个数组的交集存入result数组
int k = 0;//result数组的初始下标
for(int i=0;i<nums1Size;i++){//遍历数组1
hash[nums1[i]]++;//保存数字
}
for(int i=0;i<nums2Size;i++){//遍历数组2
if(hash[nums2[i]]>0){//数组2中的数字数组1已经出现过
int num = nums2[i];
if(hash[num] >= 1){//存在且未被处理
result[k++] = num;//将数字保存进result数组,并更新下标
hash[num] = 0;//避免重复计算
}
}
}
*returnSize = k;
return result;
}
三、202 快乐数
int getSum(int n){
int sum =0;
while(n){
sum += (n%10)*(n%10);
n/=10;
}
return sum;
}
bool isHappy(int n) {
int hash[163]={0};//定义一个哈希数组,全部置0
int sum = getSum(getSum(n));//计算平方和
int next = sum;//将next作为起点
while(next!=1){
sum = getSum(next);
if(hash[sum])
return 0;
hash[sum] = 1;//标记,代表访问过
next = sum;//这样写能更加快速,不会超出时间限制,我是这样理解的
}
return true;
}
这道题其实用c++的set会更好,但是奈何小编的c++还在萌芽阶段,实在没法用set解决,请大家见谅哈,后面小编的C++有了进步还会把这些因为c++错过的题重新练习,补博客的!!!