1. 两数之和
一次通过
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int,int> m;
vector<int> ret;
for(int i=0;i<nums.size();i++) {
if(i==0){
m[nums[i]]=0;
continue;
}
if(m.find(target-nums[i])!=m.end()){
ret.push_back(i);
ret.push_back(m[target-nums[i]]);
return ret;
} else {
m[nums[i]]=i;
}
}
return {-1,-1};
}
};
2. 两数相加
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode* head = new ListNode;
ListNode* ptr = head;
int sum=0;
int count=0;
while(l1||l2||count){
sum=0;
if(l1&&l2){
sum=l1->val+l2->val;
l1=l1->next;
l2=l2->next;
} else if (l1) {
sum = l1->val;
l1=l1->next;
} else if (l2) {
sum = l2->val;
l2=l2->next;
}
sum = sum+count;
count = sum/10;
sum = sum%10;
ListNode* node = new ListNode(sum,nullptr);
ptr->next=node;
ptr=ptr->next;
}
ptr=head->next;
delete head;
return ptr;
}
};
3 不重复的数组
16分钟三次才过。暴力解法
class Solution {
public:
int lengthOfLongestSubstring(string s) {
set<char> se;
int len =0;
for(int i=0;i<s.size();i++) {
for(int j=i;j<s.size();j++) {
if(se.find(s[j])!=se.end()) {
len=max(len,j-i);
break;
} else {
se.insert(s[j]);
}
}
len=max(len,int(se.size()));
se.clear();
}
return len;
}
};