当前位置: 首页 > article >正文

面试经典 150 题:20、2、228、122

20. 有效的括号

参考代码

#include <stack>

class Solution {
public:
    bool isValid(string s) {
        if(s.size() < 2){ //特判:空字符串和一个字符的情况
            return false;
        }
        bool flag = true;
        stack<char> st; //栈
        for(int i=0; i<s.size(); i++){
            if(s[i] == '(' || s[i]=='{' || s[i]=='['){
                st.push(s[i]);
            }
            if(s[i] == ')' || s[i]=='}' || s[i]==']')
            {
                if(st.empty()){
                    flag = false;
                    break;
                }
                char c = st.top();
                //括号匹配
                if((c == '(' && s[i] == ')') || (c == '{' && s[i]=='}') || 
                (c =='[' && s[i]==']')){
                    st.pop();
                }
                else{
                    flag = false;
                    break;
                }
            }
        }
        if(!st.empty()) //栈里面还有元素
        {
            flag = false;
        }
        return flag;
    }
};

2. 两数相加

参考代码

/**
 * 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* addTwoNumbers(ListNode* l1, ListNode* l2) {
        ListNode *previous, *current;
        previous = new ListNode(-1); //虚拟结点
        current = previous;
        int t = 0; //注意进位
        while(l1 || l2 || t){
            if(l1){
                t += l1->val;
                l1 = l1->next;
            }
            if(l2){
                t += l2->val;
                l2 = l2->next;
            }
            current = current->next = new ListNode(t % 10);
            t /= 10;
        }
        //返回头结点的下一个结点,即第一个数字结点
        return previous->next;
    }
};

228. 汇总区间

参考代码

class Solution {
public:
    vector<string> summaryRanges(vector<int>& nums) {
        vector<string> result;
        int i=0, size=nums.size();
        while(i < size){
            int low = i;
            i++;
            while(i < size && nums[i] == nums[i-1] + 1)
            {
                i++;
            }
            int high = i-1;
            //找不到连续数字:
            string s = to_string(nums[low]);
            if(low < high){ //形成区间
                s += "->" + to_string(nums[high]);
            }
            //否则,区间只有一个数
            result.push_back(s);
        }
        return result;
    }
};

122. 买卖股票的最佳时机 II

参考代码

贪心

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int profit = 0;
        for(int i=1; i<prices.size(); i++){
            //计算两天之间的盈亏
            int ProfitAndLoss = prices[i] - prices[i-1];
            if(ProfitAndLoss > 0)
            {
                //买入股票
                profit += ProfitAndLoss;
            }
        }
        return profit;
    }
};

动态规划

//动态规划
class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int size = prices.size();
        //持有现金,股票
        int cash[size], stock[size];
        if(size < 2){
            return 0;
        }
        cash[0] = 0; //初始状态:不买股票
        stock[0] = -prices[0]; //持有股票,当前拥有的现金数是当天股价的相反数
        for(int i=1; i<size; i++){
           //不卖股票(什么都不做),或者卖股票,股票换钱
           cash[i] = max(cash[i-1], stock[i-1]+prices[i]);
           //不买股票(什么都不做),或者加仓,钱换股票
           stock[i] = max(stock[i-1], cash[i-1]-prices[i]);
        }
        return cash[size-1];
    }
};


http://www.kler.cn/a/396611.html

相关文章:

  • unity小:shaderGraph不规则涟漪、波纹效果
  • Linux---常用shell脚本
  • RK3568平台(I2C篇)i2c_transfer接口详解
  • 民事诉讼中,火灾事故认定书并非不可推翻,其证明力弱于鉴定意见
  • 基于Spring Boot的在线性格测试系统设计与实现(源码+定制+开发)智能性格测试与用户个性分析平台、在线心理测评系统的开发、性格测试与个性数据管理系统
  • 数据结构--数组
  • 第23天Linux下常用工具(二)
  • 鸿蒙生态下的安全隐私保护:打造用户信任的应用体验
  • .netcore + postgis 保存地图围栏数据
  • [Go]-sync.map使用详解
  • AI助力智能运维!在Linux主机上实现和chatgpt对话
  • 九、HttpMessageConverter
  • css:权重计算
  • 在 Unix 和类 Unix 操作系统中,信号是一种异步的通知机制,用于通知进程发生了一些特定的事件。
  • 【C#】第6章:用户界面设计 课后习题
  • 【提高篇】3.4 GPIO(四,工作模式详解 下)
  • 企业知识中台:构建智慧企业的核心
  • 三、计算机视觉_01图像的基本操作
  • Android 国际化多语言标点符号的适配
  • 基于lighthouse搭建私有网盘Cloudreve【开源应用实践】
  • pySpark乱码
  • 【星闪EBM-H63开发板】AT固件的配置与测试
  • 【Java Web】JSON 以及 JSON 转换
  • JavaWeb笔记整理——Spring Task、WebSocket
  • 【摄像头识别动物行为通常涉及计算机视觉技术】
  • 基于Java+SpringBoot+Vue的智慧社区设计与实现