力扣刷题-1

两数之和
1.链表问题
链表是一种数据结构,val表示链表的当前位,默认从第一位开始。next表示链表的下一位。链表在执行下一位赋值时需要判断当前位是否为空,否则无法进行赋值操作。
2.循环问题
对于两数之和问题,关键点在与反向表和进位,因此设置tail和final两个链表,w为sum和进位。
w = l1.val + l2.val
tail = w % 10
tail = tail.next
w = w/10
head = tail

class Solution {
public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
        int w = 0;
        ListNode* final = nullptr;
        ListNode* tail = nullptr;
//最终链表final和其反链表tail
//      
        while(l1|| l2|| w!=0)
        {
            if(l1)
            {
                w += l1->val;
                l1 = l1->next;
            }
            if(l2)
            {
                w += l2->val;
                l2 = l2->next;
            }

            if(!final)
            {
                final = tail = new ListNode(w%10);
            }
            else
            {
                tail->next = new ListNode(w % 10);
                tail = tail->next;
            }

            w = w /10;
            if(w>0)
            {
                tail->next = new ListNode(w);
            }
        } 
        return final;
    }
};

无重复字符串

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        //定义一个哈希列表
        unordered_set<char> map;
        //得到s的总长度
        int n = s.size();
        //定义指针变量r和最终结果
        int r = -1,result= 0;
        //滑动窗口循环从一个字符开始
        for(int i = 0 ;i<n; ++i)
        {
            //从第二个字符开始每次从哈希列表中移除最开始的指针
            if(i!=0)
            {
                map.erase(s[i-1]);
            }
            //判断条件,1字符串s的范围内,2哈希表中没有重复的字符
            while(r+1<n && !map.count(s[r+1]))
            {
                //每次插入一个新的字符
                map.insert(s[r+1]);
                ++r;
            }
            //每次取一个最大值,知道遍历完整个字符串
            result = max(result,r-i+1);
        
        }
        return result;
    }
};
上一篇:上低音号


下一篇:使用 tail 结合 grep 查找日志关键字并高亮及显示所在行上下文