很简单的一道题
bool isAnagram(char * s, char * t){
int vis1[27] = {0};
int vis2[27] = {0};
bool flag = 0;
while(*s!= NULL && *t != NULL) {
vis1[(*s-'a')]++;
vis2[(*t-'a')]++;
if(*s != *t) {
flag = 1;
}
s++;
t++;
}
if(*s == NULL && *t != NULL) {
return 0;
}
if(*t == NULL && *s != NULL) {
return 0;
}
if(flag == 0) {
return 0;
}
for(int i = 0; i < 27; i++) {
if(vis1[i] != vis2[i]) {
return 0;
}
}
return 1;
}
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int ret[1001];
int* intersection(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize){
int vis[1001] = {0};
int vis2[1001] = {0};
for(int i = 0; i <nums1Size; i++) {
vis[nums1[i]]++;
}
for(int i = 0; i < nums2Size; i++) {
vis2[nums2[i]]++;
}
int cnt = 0;
for(int i = 0; i <= 1000; i++) {
if(vis[i] && vis2[i]) {
ret[cnt++] = i;
}
}
*returnSize = cnt;
return ret;
}
这个题用unorderset的方法判重,感觉更好用,而且也很好理解
#include <unordered_set>
using namespace std;
unordered_set<int>hashset;
class Solution {
public:
int getsum(int n){
int sum = 0;
while(n) {
int val = n%10;
sum += val *val;
n = n/10;
}
return sum;
}
bool isHappy(int n) {
hashset.clear();
while(1) {
int sum = getsum(n);
printf("%d\n",sum);
if(sum == 1) {
return 1;
}
if(hashset.find(sum) != hashset.end() || sum == 0) {
return 0;
}
hashset.insert(sum);
n = sum;
}
}
};
unordered_map <key, value> hash
-----> auto it:hash
如何访问: it->first(key); it->second(value)
#include <unordered_map>
using namespace std;
unordered_map<int,int>hashmap;
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
hashmap.clear();
for(int i = 0; i < nums.size(); i++) {
auto it = hashmap.find(target-nums[i]);
if(it != hashmap.end()){
return {i, it->second};
}
hashmap[nums[i]] = i;
}
return {};
}
};