- 检查整数及其两倍数是否存在
这道题为了快点a就使用的是暴力法,大致判断一下就可以了,但是其实是可以用hash的。
解题思路
暴力写法就不说了。可以写一个利用哈希表的。其中,key存储的是表中元素的两倍。然后在第二次遍历的时候可以直接查是否有对应的key。
代码
class Solution {
public:
bool checkIfExist(vector<int>& arr) {
multimap<int,int> mp;
for(int i=0;i<arr.size();i++)
{
mp.insert(pair<int,int>(arr[i]*2,i));
}
for(int i=0;i<arr.size();i++)
{if(mp.count(arr[i])&&(arr[i]!=0))return 1;}
if(mp.count(0)>1)return 1;
return 0;
}
};
此外,还有先排好序,然后使用双指针的方法。事实上,对这样的两次遍历的问题,都可以考虑适用双指针的方式来减少算法的复杂度。
- 制造字母异位词的最小步骤数
其实这道题很容易可以想到来统计字符串的字母数。但是如何具体来统计对我来说就懵逼了。我刚开始想到了用map,实现字符和数量的映射关系。算是熟悉了一下map的使用:
1.map<char,int> mp;
2.mp.count(key);
3.mp.find(key);
4mp.insert(pair<char,int>(‘c’,2));
但是实际发现对方大佬实现这个很简单好吧。直接就是用一个数组就实现了。其中最为关键的想法就是字符和数字本来就可以对应。a-z对应的ascii值是不一样的,于是可以实现a-z和数字的对应。
即便a的码值不记得也可以(a是97,A是65),只要用字母减去‘a’即可得到字符的数值了。