LeetCode.1-10

LeetCode 1. 两数之和

1. 两数之和.

哈希表实现插入查询
class Solution {
    
    
public:
    vector<int> twoSum(vector<int>& nums, int target) {
    
    
        unordered_map<int,int>heap;
        for(int i=0;i<nums.size();i++)
        {
    
    
            int r=target-nums[i];
            if(heap.count(r)) return{
    
    heap[r],i};
            heap[nums[i]]=i;
        }
        return {
    
    };
    }
};

LeetCode 2. 两数相加

2. 两数相加.
模拟: O ( n ) O(n) O(n)
思路:dummy为虚拟头结点,t表示进位,只要链表l1,l2不为空或还存在进位,则继续循环。
每次t加上l1,l2当前位上的数字,l1,l2随后指向下一个结点
注意:虚拟头结点可避免讨论边界情况
C++代码:

class Solution {
    
    
public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
    
    
        auto dummy=new ListNode(-1),cur=dummy;
        int t=0;
        while(l1 || l2 || t)
        {
    
    
            if(l1) t+=l1->val,l1=l1->next;
            if(l2) t+=l2->val,l2=l2->next;
            cur->next=new ListNode(t%10);
            cur=cur->next;
            t/=10;
        }
        return dummy->next;
    }
};

LeetCode 3. 无重复字符的最长子串

3.无重复字符的最长子串.
算法:
双指针扫描 O ( n ) O(n) O(n)
思路:双指针+哈希
哈希表存的是此次循环中子串中每个字符出现的次数
每次循环遍历时,heap[s[i]]++,表示在这个子串中字符出现的次数加1,如果s[i]>1,表示该子串中前面有字符与新加的字符相同,前指针j后移直到s[i]出现次数=1
最后每次更新下最大值即可
C++代码:

class Solution {
    
    
public:
    int lengthOfLongestSubstring(string s) {
    
    
        unordered_map<char,int>heap;
        int res=0;
        for(int i=0,j=0;i<s.size();i++)
        {
    
    
            heap[s[i]]++;
            while(heap[s[i]]>1) heap[s[j++]]--;
            res=max(res,i-j+1);
        }
        return res;
    }
};

LeetCode 4. 寻找两个正序数组的中位数

4.寻找两个正序数组的中位数.

LeetCode 5. 最长回文子串

5. 最长回文子串.

LeetCode 6. Z字形变换

6. Z字形变换 .

LeetCode 7. 整数反转

7. 整数反转.

LeetCode 8. 字符串转换整数 (atoi)

8. 字符串转换整数 (atoi).

LeetCode 9. 回文数

9. 回文数.

LeetCode 10. 正则表达式匹配

10. 正则表达式匹配.

猜你喜欢

转载自blog.csdn.net/qq_45327808/article/details/115017865
今日推荐