leetcode刷题第一天-数组

两数之和

知识点:

  • map: map内部实现了一个红黑树,该结构具有自动排序的功能,因此map内部的所有元素都是有序的,红黑树的每一个节点都代表着map的一个元素,因此,对于map进行的查找,删除,添加等一系列的操作都相当于是对红黑树进行这样的操作,故红黑树的效率决定了map的效率。
  • unordered_map: unordered_map内部实现了一个哈希表,因此其元素的排列顺序是杂乱的,无序的。
  • 对于查找问题,unordered_map会更加高效一些,因此遇到查找问题,常会考虑一下用unordered_map。参考文献
class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        unordered_map<int,int> hashTable;
        int size=nums.size();
        for(int i=0;i<size;i++){
            auto it=hashTable.find(target-nums[i]);
            if(it!=hashTable.end()){
                return {it->second,i};
            }
            hashTable[nums[i]]=i;             
        }
        return {};
    }
};

合并两个有序列表

  • 关键要声明出两个指针,一个指针的值在不断变化,另一个指针的值记录起始地址。
class Solution {
public:
    ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {
        ListNode* preHead=new ListNode(-1);
        ListNode* pre = preHead;
        while(list1!=nullptr&&list2!=nullptr){
            if(list1->val<=list2->val){
                pre->next=new ListNode(list1->val);
                list1=list1->next;
            }else{
                pre->next=new ListNode(list2->val);
                list2=list2->next;
            }
            pre=pre->next;
        }
        pre->next=list1==nullptr?list2:list1;
        return preHead->next;
    }
};

有效的括号

这一题的关键是用栈来解题。

class Solution {
public:
    bool isValid(string s) {
        int size=s.size();
        if (size%2!=0){
            return false;
        }
        unordered_map<char,int> r={{'{',0},{'}',1},{'[',2},{']',3},{'(',4},{')',5}};
        stack<char> st;
        for(int i=0;i<size;i++){
            if(st.size()!=0&&r[s[i]]%2==1&&r[s[i]]-r[st.top()]==1){
                st.pop();
            }else{
                st.push(s[i]);
            }
        }
        if(st.size()==0){
            return true;
        }
        return false;
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值