Reverse Vowels of a String
"""
"""
class Solution {
public:
bool isVowel(char a){
if(a=='a'||a=='e'||a=='i'||a=='o'||a=='u')
return true;
if(a=='A'||a=='E'||a=='I'||a=='O'||a=='U')
return true;
return false;
}
string reverseVowels(string s) {
int j=s.size()-1;
char temp;
int i=0;
while(i<j){
if(isVowel(s[i])){
if(isVowel(s[j])){
temp = s[j];
s[j] = s[i];
s[i] = temp;
i += 1;
j -= 1;
}
else
j -= 1;
}
else
i += 1;
}
return s;
}
};
Intersection of Two Arrays
"""
"""
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
vector<int> s;
unordered_map<int,int> map;
for(int i=0;i<nums1.size();i++){
if(map.find(nums1[i])==map.end())
map.insert({nums1[i],1});
}
for(int i=0;i<nums2.size();i++){
if(map.find(nums2[i])!=map.end() && map[nums2[i]]==1){
s.push_back(nums2[i]);
map[nums2[i]] -= 1;
}
}
return s;
}
};
Intersection of Two Arrays II
"""
"""
class Solution {
public:
vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {
vector<int> s;
unordered_map<int,int> map;
for(int i=0;i<nums1.size();i++){
if(map.find(nums1[i])==map.end())
map.insert({nums1[i],1});
else
map[nums1[i]] += 1;
}
for(int i=0;i<nums2.size();i++){
if(map.find(nums2[i])!=map.end() && map[nums2[i]]>=1){
s.push_back(nums2[i]);
map[nums2[i]] -= 1;
}
}
return s;
}
};
Valid Perfect Square
"""很有趣的题目。
1+3+5+7: sqrt n
binary search: log n
牛顿法,求sqrt
"""
class Solution {
public:
bool isPerfectSquare(int num) {
//x = x - (x*x-num)/2/x;
long t = num;
while (t * t > num) {
t = (t + num / t) / 2;
}
return t * t == num;
}
};
Sum of Two Integers
A summary: how to use bit manipulation
"""
"""
class Solution {
public:
int getSum(int a, int b) {
int sum = a;
while(b){
sum = a ^ b;
b = (a & b)<<1;
a = sum;
}
return sum;
}
};
Guess Number Higher or Lower
"""Binary Search vs Ternary Search
"""
class Solution {
public:
int Tsearch(int s, int e){
if(s>=e)
return s;
int i = (e-s)/3+s;
int j = (e-s)/3*2+s;
int q = guess(i);
if(q==0)
return i;
if(q==-1)
return Tsearch(s,i-1);
if(q==1){
q = guess(j);
if(q==0)
return j;
if(q==1)
return Tsearch(j+1,e);
if(q==-1)
return Tsearch(i+1,j-1);
}
}
int guessNumber(int n) {
return Tsearch(1,n);
}
};
Ransom Note
"""
"""
class Solution {
public:
bool canConstruct(string ransomNote, string magazine) {
unordered_map<char,int> map;
for(int i=0; i<magazine.size();i++)
map[magazine[i]] ++;
for(int i=0; i<ransomNote.size();i++){
map[ransomNote[i]] --;
if(map[ransomNote[i]]<0)
return false;
}
return true;
}
};
First Unique Character in a String
class Solution {
public:
int firstUniqChar(string s) {
unordered_map<char,int> map;
for(int i=s.size()-1;i>=0;i--){
map[s[i]]++;
}
for(int i=0;i<s.size();i++)
if(map[s[i]]==1)
return i;
return -1;
}
};
"""也可以在hash map中同时记录index,这样第二次不需要遍历s,只需要遍历hash map。
"""
class Solution {
public:
int firstUniqChar(string s) {
unordered_map<char,pair<int,int>> map;
for(int i=s.size()-1;i>=0;i--){
map[s[i]].first++;
map[s[i]].second=i;
}
int idx=s.size();
for(auto p: map){
if(p.second.first==1)
idx = min(idx, p.second.second);
}
return idx==s.size()?-1:idx;
}
};
Find the Difference
"""和之前某题很像。hash map肯定可以。
xor
"""
class Solution {
public:
char findTheDifference(string s, string t) {
char r=0;
for(char c:s)
r ^= c;
for(char c:t)
r ^= c;
return r;
}
};