242. 有效的字母异位词
class Solution {
public:
bool isAnagram(string s, string t){
int record[26]={0};
for(int i=0;i<s.size();i++){
record[s[i]-'a']++;//遍历一趟计数
}
for(int i=0;i<t.size();i++){
record[t[i]-'a']--;//遍历一趟减数
}
for(int i=0;i<26;i++){
if(record[i]!=0)
return false;//有位置不为0,说明不是异位
}
return true;
}
};
349. 两个数组的交集
int* intersection(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize){
int nums1Cnt[1000]={0};//模拟哈希表
int lessSize=nums1Size<nums2Size?nums1Size:nums2Size;
int*result=(int*)calloc(lessSize,sizeof(int));//为交集数组开辟空间
int index=0;
int i;
for(i=0;i<nums1Size;i++)//计算数组1中每个元素及其个数
nums1Cnt[nums1[i]]++;
for(i=0;i<nums2Size;i++)//检查数组2中有没有相应元素
{
if(nums1Cnt[nums2[i]]>0){//交集元素
result[index++]=nums2[i];
nums1Cnt[nums2[i]]=0;//清除加入最终结果数组的元素
}
}
*returnSize=index;
return result;
}
- calloc会将申请的内存空间初始化为0
- 主要思想是建立哈希表
- 判断元素是否在集合里:哈希表
202. 快乐数
int getSum(int n){
int sum=0;
while(n){//取各个位置元素平方和
sum+=(n%10)*(n%10);
n/=10;
}
return sum;
}
bool isHappy(int n){
int sum=getSum(n);
int hash[1000]={0};
while(sum!=1){
if(hash[sum]==0){//没有出现过
hash[sum]++;
}else{
return false;//已经出现过,重复
}
sum=getSum(sum);//判断下一个
}
return true;
}