题目链接:242. 有效的字母异位词 - 力扣(LeetCode)
之前有做过这道题,大致知道怎么做,但是实现起来还是存在一点问题的,不过今天有自己调试debug的过程
思路:用哈希数组先遍历s字符串,以这个元素的值做下标,它出现过几次,哈希数组中的值就是多少。再遍历一次t字符串,在哈希数组中寻找以每个元素的值做下标的哈希数组元素,出现了几次就减几次,最后哈希数组中的元素都是0的话,那么这两个字符串就是有效字母异位词。
代码复现:
bool isAnagram(char * s, char * t){
int sl,tl
int cnt[10000] = {0};
sl = strlen(s), tl = strlen(t);
//如果长度不相等说明一个长一个短显然不满足条件
if(sl != tl){
return false;
}
//遍历s
for(int i = 0; i < sl; i++){
cnt[s[i] - 'a']++;
}
//遍历t同时进行判断
for(int i = 0; i < sl; i++){
cnt[t[i] - 'a']--;
if(t[i] - 'a'] < 0)
return false;
}
return true;
//或者先遍历完t再进行判断
/* for(int i = 0; i < sl; i++){
cnt[t[i] - 'a']--;
}
//一定一定要注意这里的判断长度是26,而不是s的长度后者t的长度
for(int i = 0; i < 26; i++){
if(cnt[i] != 0)
return false;
}
return true;
*/
}
题目链接:349. 两个数组的交集 - 力扣(LeetCode)
3!2!1!上链接!
代码复现:
int* intersection(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize){
//最后返回的交集的长度肯定是短一点的那个数组长度
int l = nums1Size > nums2Size ? nums2Size : nums1Size;
int *result = (int*)calloc(l,sizeof(int));
int *cnt[10000] = {0};
int index = 0;
//出现过的数它们自己的数值作为下标
for(int i = 0; i < nums1Size; i++){
cnt[nums1[i]]++;
}
for(int i = 0; i < nums2Size; i++){
//如果这个数出现过
if(cnt[nums2[i]] > 0 ){
//那么就在添加结果数组中,
result[index++] = nums2[i];
//添加过后就将标记数组中的这个数标记为0,意味着已经判断过了
cnt[nums2[i]] = 0;
}
}
//我不知道为什么要有这个,让我打日志打日志 我还没学会!!
*returnSize= index;
return result;
}
题目链接:202. 快乐数 - 力扣(LeetCode)
需要注意到的是:在计算过程中,一旦这个sum出现过,那么它就会无限循环下去,一定就不是快乐数了
代码复现:
int getsum(int n){
int sum = 0;
while(n){
sum = (n % 10)*(n % 10);
n /= 10;
}
return sum;
}
bool isHappy(int n){
int visited[10000] = {0};
int sum = getsum(n);
while(1){
if(sum== 1)
return true;
else if (sum != 1)
return false;
else
visited[sum]++;
sum = getsum(sum);
/* 写好一点
while(sum != 1){
if(visited[sum] == 1){
return false;
}
else{
visited[sum] = 1;
}
sum = getsum(sum);
}
return true;
}
}