242.有效的字母异位词
思路:
建立2个size=26的数组作为哈希表,分别存储字符串的字母个数情况,然后循环对比两个数组相对位置的数据是否相同。出现不同为false,否则为真。
看视频后:
用一个数组即可,分别循环一遍字符串,通过-1,0,1的状态判断有效情况。
349.两个数组的交集
思路:
用数组作为哈希表,但没想到怎么解
看视频后:
本题在改成元素少于1000后可以用数组存储,建议用set
用数组:使用unordered_set存储结果result,第一个数组hash[nums1[i]]=1,第二个数组发现hash[nums2[j]==1]则将nums2[j]插入result.用result.insert();最后改成vector<int>形式
vector<int>(result.begin(),result.end())
用set: unordered_set 建立result_set和nums1_set, nums1_set放入nums1的元素,然后遍历nums2,如果发现nums2里有相同元素就放入result_set,最后改成vector<int>形式
202. 快乐数
思路:
循环尽可能大的次数,如果在该次数内n都没变成1,那么就不是快乐数。卡在循环条件上。
看代码后:
使用set存储每次的sum后有三种情况:1.sum==1 2.sum在set内 3. sum不在set内。只需要判断sum是否重复出现。
可以将求和单独做成函数。
1.两数之和
思路:
1.用暴力遍历每一位和其后面位的和,找到和为target的就return,否则最后return{-1,-1}
看视频后:
为什么使用哈希表?为什么使用map?map是用来做什么的?map里面的key和value是存什么的?
1. map存放了遍历过的元素,在遇到新元素时找map里是否有相对的元素。
2. 不确定数组的大小和分布,而且需要存放数组的下标,但本题不需要排序,所以用unordered—_map;
3.map是用来存放遍历过的元素的值和下标
4.key存放值,value存放下标
unordered_map <int,int>map;
用auto iter=map.find(target-nums[i])
iter->second为value,
map.insert(pair<int,int>(nums[i],i));