001 两数之和 哈希表
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int,int> myhash;
vector<int>ans;
vector<int>::iterator i;
for(i=nums.begin();i<nums.end();i++){
unordered_map<int,int>::iterator wh=myhash.find(target-*i);
if(wh!=myhash.end()) {
ans.push_back((*wh).second);
ans.push_back(i-nums.begin());
}
myhash[*i]=i-nums.begin();
}
return ans;
}
};
002 两数相加 单链表,指针
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode *ans=new ListNode,*st=ans,*ans2=new ListNode;
ans->next=NULL;
bool flag=false;
for(;;){
ListNode *tmp=new ListNode;
int first=(l1!=NULL)?l1->val:0,second=(l2!=NULL)?l2->val:0;
tmp->val=(first+second);
if(flag) tmp->val++;
else if(!(flag) && l1==NULL && l2==NULL) break;
if((tmp->val)>9) {flag=true;tmp->val=(tmp->val)%10;}
else flag=false;
tmp->next=ans->next;
ans->next=tmp;
ans=ans->next;
if(l1==NULL && l2==NULL) break;
l1=(l1!=NULL)?l1->next:NULL;
l2=(l2!=NULL)?l2->next:NULL;
}
return st->next;
}
};
003 无重复字符的串 窗口滑动,哈希表
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int len=s.length(),max=0,now=0,i=0,j=0;
unordered_map<char,int> myhash;
unordered_map<char,int>::iterator it;
if(len==0) return 0;
for(;;){
it=myhash.find(s[i]);
if(it==myhash.end()){
myhash[s[i]]=1;
now++;
max=(max>now)?max:now;
if(i==len-1) break;
i++;
}
while(it!=myhash.end()){
myhash.erase(s[j]);
j++;
now--;
it=myhash.find(s[i]);
}
}
return max;
}
};