【2023】字节跳动 10 日心动计划——第三关

目录

  • [1. 最长有效括号](#1. 最长有效括号)
  • [2. 有序数组的平方](#2. 有序数组的平方)

1. 最长有效括号

🔗 原题链接:32. 最长有效括号

类似于有效的括号,考虑用栈来解决。

具体来讲,我们始终保持栈底元素为当前已经遍历过的元素中「最后一个没有被匹配的右括号的下标」,这样的做法主要是考虑了边界条件的处理,栈里其他元素维护左括号的下标。

从左往右遍历整个字符串,如果遇到 (,则将其下标压入栈中;如果遇到 ),则 弹出栈顶元素,然后判断栈是否为空,如果栈为空,说明当前的右括号为没有被匹配的右括号,将其压入栈中,否则,更新答案。

注意,任何时刻,只有栈底元素是右括号的下标,其他元素都是左括号的下标!

cpp 复制代码
class Solution {
public:
    int longestValidParentheses(string s) {
        stack<int> stk;
        int ans = 0;
        stk.push(-1);

        for (int i = 0; i < s.size(); i++) {
            if (s[i] == '(') stk.push(i);
            else {
                stk.pop();
                if (stk.empty()) stk.push(i);
                else ans = max(ans, i - stk.top());
            }
        }

        return ans;
    }
};

2. 有序数组的平方

🔗 原题链接:977. 有序数组的平方

这里介绍两种做法。

方法一:找到正负元素的分界线,然后对正、负数组进行二路归并。

cpp 复制代码
class Solution {
public:
    vector<int> sortedSquares(vector<int>& nums) {
        int p = lower_bound(nums.begin(), nums.end(), 0) - nums.begin();
        int i = p, j = p - 1;
        vector<int> res;

        while (i < nums.size() && j >= 0) {
            int a = pow(nums[i], 2), b = pow(nums[j], 2);
            if (a <= b) res.push_back(a), i++;
            else res.push_back(b), j--;
        }

        while (i < nums.size()) {
            int a = pow(nums[i], 2);
            res.push_back(a);
            i++;
        }

        while (j >= 0) {
            int b = pow(nums[j], 2);
            res.push_back(b);
            j--;
        }

        return res;
    }
};

方法二:同样使用双指针。之前我们是让两个指针从中间往两边移动,这次我们让两个指针从两边往中间移动,所以填答案的时候需要倒着填。

cpp 复制代码
class Solution {
public:
    vector<int> sortedSquares(vector<int>& nums) {
        int n = nums.size();
        vector<int> res(n);
        int i = 0, j = n - 1, k = n - 1;

        while (i <= j) {
            int a = nums[i] * nums[i];
            int b = nums[j] * nums[j];
            if (a >= b) res[k] = a, i++;
            else res[k] = b, j--;
            k--;
        }

        return res;
    }
};
相关推荐
星空露珠6 分钟前
数独生成题目lua脚本
数据结构·数据库·算法·游戏·lua
给大佬递杯卡布奇诺15 分钟前
FFmpeg 基本数据结构 URLContext分析
数据结构·c++·ffmpeg·音视频
hadage23315 分钟前
--- 单源BFS权值为一算法 迷宫中离入口最近的出口 ---
算法·宽度优先
LDG_AGI27 分钟前
【推荐系统】深度学习训练框架(一):深入剖析Spark集群计算中Master与Pytorch分布式计算Master的区别
人工智能·深度学习·算法·机器学习·spark
LDG_AGI27 分钟前
【推荐系统】深度学习训练框架(二):深入剖析Spark Cluster模式下DDP网络配置解析
大数据·网络·人工智能·深度学习·算法·机器学习·spark
ai智能获客_狐狐30 分钟前
电商零售行业外呼优势
人工智能·算法·自然语言处理·语音识别·零售
Giser探索家5 小时前
无人机桥梁巡检:以“空天地”智慧之力守护交通生命线
大数据·人工智能·算法·安全·架构·无人机
budingxiaomoli8 小时前
算法--滑动窗口(二)
算法
ID_180079054739 小时前
淘宝实时拍立淘按图搜索数据|商品详情|数据分析提取教程
算法·数据分析·图搜索算法
l1t9 小时前
Lua与LuaJIT的安装与使用
算法·junit·单元测试·lua·luajit