class Solution {
public:
vector<int>twoSum(vector<int>& nums,int target){
std::unordered_map<int,int> mp;for(int i =0; i < nums.size();++ i)
mp.emplace(nums[i], i);for(int i =0; i < nums.size();++ i){if(mp.count(target - nums[i])&&
mp[target - nums[i]]!= i)return{mp[target - nums[i]], i};}return{-1,-1};}};
2. 两数相加
class Solution {
public:
ListNode*addTwoNumbers(ListNode* l1, ListNode* l2){int tis =0;
ListNode *head = new ListNode();auto p = head;auto pre = head;for(ListNode *i = l1,*j = l2; i || j;){if(i) tis += i -> val, i = i -> next;if(j) tis += j -> val, j = j -> next;
p->val = tis %10;
tis /=10;if(i || j){
p->next = new ListNode();
p = p->next;}}if(tis){
p->next = new ListNode();
p->next->val = tis;}return head;}};
3. 无重复字符的最长子串
class Solution {
public:intlengthOfLongestSubstring(string s){int ch[128]={0};int l =0, ans =0;for(int i =0; i < s.size();++ i){while(ch[s[i]]) ch[s[l ++]]--;
ch[s[i]]++;
ans =max(ans, i - l +1);}return ans;}};
4. 寻找两个正序数组的中位数
class Solution {
public:doublefindMedianSortedArrays(vector<int>& nums1, vector<int>& nums2){int idx = nums1.size()+ nums2.size();if(idx %2==0)return(get(nums1, nums2, idx /2)+get(nums1, nums2, idx /2+1))/2.0;elsereturnget(nums1, nums2,(idx +1)/2);}intget(vector<int>&a, vector<int>&b,int k){int m = a.size(), n = b.size();int idx1{}, idx2{};while(true){if(idx1 == m)return b[idx2 + k -1];if(idx2 == n)return a[idx1 + k -1];if(k ==1)return min (a[idx1], b[idx2]);int nidx1 = min (idx1 + k /2-1, m -1);int nidx2 = min (idx2 + k /2-1, n -1);int aa = a[nidx1];int bb = b[nidx2];if(aa <= bb){
k -= nidx1 - idx1 +1;
idx1 = nidx1 +1;}else{
k -= nidx2 - idx2 +1;
idx2 = nidx2 +1;}}}};
5. 最长回文子串
class Solution {
public:
string longestPalindrome(string s){int st =0, len =1;
vector<vector<int>>f(s.size()+2, vector<int>(s.size()+2));for(int i =1; i <= s.size();++ i) f[i][i]=1;for(int i =1; i < s.size();++ i){if(s[i]== s[i -1]){
f[i][i +1]=1;if(len <2){
st = i -1;
len =2;}}}for(int l =3; l <= s.size();++ l)for(int i =1; i + l -1<= s.size();++ i){int j = i + l -1;if(s[i -1]== s[j -1]){
f[i][j]= f[i +1][j -1];if(f[i][j]&& l > len){
st = i -1;
len = l;}}}return s.substr(st, len);}};
6. Z 字形变换
class Solution {
public:
string convert(string s,int numRows){if(numRows ==1)return s;
vector<string>ve(numRows);
vector<int>trans(numRows *2-2);for(int i =0; i < numRows;++ i)
trans[i]= i;for(int i = numRows, j =1; i < numRows *2-2;++ i,++ j)
trans[i]= numRows - j -1;int st =0;for(constauto& c : s){
ve[trans[st]].push_back(c);
st =(st +1)% trans.size();}
string tm;for(auto& s : ve)
tm += std::move(s);return tm;}};
7. 整数反转
class Solution {
public:intreverse(int x){if(x > INT_MAX || x <= INT_MIN)return0;unsignedint t = x;int f = x >=0?1:-1;
x = x <0?-x : x;unsignedint tm =0;while(x){
tm += x %10;
x /=10;if(x && INT_MAX /10+1< tm)return0;if(x) tm *=10;}if((f ==1&& tm >= INT_MAX)||(f ==-1&& tm > INT_MAX))return0;elsereturn f * tm;}};
8. 字符串转换整数 (atoi)
class Solution {
public:intmyAtoi(string s){longlong base =0;int f =1, flag =1, cnt =0;for(constauto& c : s){if(c ==' '&& flag)continue;
flag =0;if(c =='-'|| c =='+'||(c >='0'&& c <='9')){if(c =='-'){if(!cnt) f =-1, cnt ++;elsebreak;}if(c =='+'){if(!cnt) f =1, cnt ++;elsebreak;}if(c >='0'&& c <='9')
base += c -'0', base *=10, cnt ++;if(base /10> INT_MAX){if(f ==1)return INT_MAX;elsereturn INT_MIN;}}elsebreak;}
base /=10;if(base * f < INT_MIN) base = INT_MIN;elseif(base * f > INT_MAX) base = INT_MAX;else base = base * f;return base;}};
9. 回文数
class Solution {
public:
bool isPalindrome(int x){if(x <0)return false;int g[12];int idx =0;while(x){
g[++ idx]= x %10;
x /=10;}for(int l =1, r = idx; l < r;++ l,-- r)if(g[l]!= g[r])return false;return true;}};