class Solution {
public:
map<int, int> mp;
map<int, int> pos;
vector<int> twoSum(vector<int>& nums, int target) {
int len = nums.size();
for(int i = 0; i < len; ++i){
if(mp[target - nums[i]]){
return vector<int>{pos[target - nums[i]], i};
}else {
mp[nums[i]] = 1;
pos[nums[i]] = i;
}
}
return vector<int>{-1, -1};
}
};
2 中等
Soluion
按位模拟加法
链表操作
Sample Code
/**
* 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 * res = 0; int c = 0;
ListNode * p = 0;
while(l1 || l2){
int l, r, sum;
if(l1) {
l = l1->val;
l1 = l1->next;
}else l = 0;
if(l2) {
r = l2->val;
l2 = l2->next;
}else r = 0;
sum = l + r + c;
c = sum / 10;
ListNode * newNode = new ListNode(sum % 10);
if(p) {
p->next = newNode;
p = newNode;
}
else p = res = newNode;
}
3 中等
Soluion
用map维护一个不出现重复字符的字符串左右边界l,r
s[l]…s[r]无重复字符
更新res
Sample Code (map)
class Solution {
public:
map<int, int> mp;
int lengthOfLongestSubstring(string s) {
if(s == "") return 0;
int res = 1;
int l = 1; int r = 1; mp[s[0]] = 1;
for(int i = 1; s[i]; ++i){
if(mp[s[i]] >= l && mp[s[i]] <= r){
l = mp[s[i]] + 1;
}
r = i + 1;
mp[s[i]] = i + 1;
res = max(res, r - l + 1);
//cout << res << endl;
}
return res;
}
};