Task04——采用C++

016. 最接近的三数之和

LeetCode链接:https://leetcode-cn.com/problems/3sum-closest/
在这里插入图片描述
思路:

暴力算法:直接三个数求和存入一个数组中,再让数组每一个元素与target相减,找到最小的数,最后返回最小的数加上target就是所求。时间复杂度是O(N^3),会TLE。
在这里插入图片描述

上代码:C++

class Solution
{
    
    
public:
    int threeSumClosest(vector<int> &nums, int target)
    {
    
    
        vector<int> ThreeSum;
        for (int i = 0; i < nums.size()-2; i++)
        {
    
    
            for (int j = i + 1; j < nums.size()-1; j++)
            {
    
    
                for (int k = j + 1; k < nums.size(); k++)
                {
    
    
                    ThreeSum.push_back(nums[i] + nums[j] + nums[k]-target);
                }
            }
        }
        int min=INT_MAX;
        for(int i=0;i<ThreeSum.size();i++){
    
    
            if(abs(min)>abs(ThreeSum[i]))
                min=ThreeSum[i];
        }
        return min+target;
    }
};

双指针法,先排序,再定义left和right指针,外层使用for循环定义i是第一位数组,left=i+1,right=最后一位。利用while循环,找到最小的。时间复杂度为O(N^2)。
在这里插入图片描述

上代码:C++

class Solution
{
    
    
public:
    int threeSumClosest(vector<int> &nums, int target)
    {
    
    
        sort(nums.begin(), nums.end());
        int result = nums[0] + nums[1] + nums[2];
        int min = INT_MAX;
        for (int i = 0; i < nums.size() - 2; i++)
        {
    
    
            int left = i + 1;
            int right = nums.size() - 1;
            while (left < right)
            {
    
    
                int ThreeSum = nums[i] + nums[left] + nums[right];
                if (abs(ThreeSum - target) < abs(result - target))
                    result = ThreeSum;
                if (ThreeSum - target == 0)
                    return target;
                else if (ThreeSum < target)
                    left++;
                else
                    right--;
            }
        }
        return result;
    }
};

020.有效的括号

LeetCode链接:https://leetcode-cn.com/problems/valid-parentheses/
在这里插入图片描述
思路:

利用栈,栈先入后出,正好利用这个,如果出现’(’、’[’、’{’,则在栈压入’)’、’]’、’}’。当出现反括号即’)’、’]’、’}'后,将栈顶元素与字符串中的括号比较,不同则返回假。最后查看栈中是否为空,为空则返回真,否则,返回假。我是通过switch实现的。在这里插入图片描述
上代码:C++

class Solution
{
    
    
public:
    bool isValid(string s)
    {
    
    
        stack<char> temp;
        for (char &ch : s)
        {
    
    
            switch (ch)
            {
    
    
            case '(':
                temp.push(')');
                break;
            case '[':
                temp.push(']');
                break;
            case '{':
                temp.push('}');
                break;
            case ')':
                if (temp.empty() || temp.top() != ch)
                    return false;
                else
                    temp.pop();
                break;
            case ']':
                if (temp.empty() || temp.top() != ch)
                    return false;
                else
                    temp.pop();
                break;
            case '}':
                if (temp.empty() || temp.top() != ch)
                    return false;
                else
                    temp.pop();
                break;
            default:;
            }
        }
        return temp.empty();
    }
};

021.合并两个有序链表

LeetCode链接:https://leetcode-cn.com/problems/merge-two-sorted-lists/

在这里插入图片描述
思路:

利用递归,直接看代码吧,代码简单。l1==nullptr或者l2=nullptr是递归出口。
在这里插入图片描述

上代码:C++

扫描二维码关注公众号,回复: 12393883 查看本文章
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution
{
    
    
public:
    ListNode *mergeTwoLists(ListNode *l1, ListNode *l2)
    {
    
    
        if (l1 == nullptr)
            return l2;
        if (l2 == nullptr)
            return l1;
        if (l1->val <= l2->val)
        {
    
    
            l1->next = mergeTwoLists(l1->next, l2);
            return l1;
        }
        if (l1->val > l2->val)
        {
    
    
            l2->next = mergeTwoLists(l2->next, l1);
            return l2;
        }
    return nullptr;
    }
};

猜你喜欢

转载自blog.csdn.net/qq_34811382/article/details/112626456