力扣题目训练(23)

2024年2月16日力扣题目训练

  • 2024年2月16日力扣题目训练
    • 645. 错误的集合
    • 653. 两数之和 IV - 输入二叉搜索树
    • 657. 机器人能否返回原点
    • 307. 区域和检索 - 数组可修改
    • 309. 买卖股票的最佳时机含冷冻期
    • 174. 地下城游戏

2024年2月16日力扣题目训练

2024年2月16日第二十三天编程训练,今天主要是进行一些题训练,包括简单题3道、中等题2道和困难题1道。惰性太强现在才完成,不过之后我会认真完成的,我会慢慢补回来,争取一天发两篇,把之前的都补上。

645. 错误的集合

链接: 错误的集合
难度: 简单
题目:
题目描述

运行示例:
运行示例

思路:
这道题本质就是计数,我采用的就是遍历计数,还可以采用位运算大家可以尝试一下。
代码:

class Solution {
public:
    vector<int> findErrorNums(vector<int>& nums) {
        vector<int> ans;
        vector<int>tmp(nums.size(),0);
        for(int i = 0; i < nums.size(); i++){
            tmp[nums[i]-1]++;
        }
        int a =0, b = 0;
        for(int i = 0; i < nums.size(); i++){
            if(tmp[i] == 2) a = i + 1;
            if(tmp[i] == 0) b = i + 1;
        }
        cout<<a<<endl;
        ans.push_back(a);
        ans.push_back(b);
        return ans;
    }
};

653. 两数之和 IV - 输入二叉搜索树

链接: 两数之和
难度: 简单
题目:
题目描述

运行示例:
运行示例

思路:
这道题可以看到我们可以利用深度优先搜索 得到节点的值,利用哈希表记录所有节点的值。
代码:

class Solution {
public:
    unordered_set<int> hashTable;
    bool findTarget(TreeNode* root, int k) {
        if(root == NULL) return false;
        if(hashTable.count(k-root->val)) return true;
        hashTable.insert(root->val);
        return findTarget(root->left,k)||findTarget(root->right,k);
    }
};

657. 机器人能否返回原点

链接: 返回原点
难度: 简单
题目:
题目描述

运行示例:
运行示例

思路:
这道题我们只需计算进行判断即可。
代码:

class Solution {
public:
    bool judgeCircle(string moves) {
        int up = 0,down = 0,left = 0,right = 0;
        for(char move : moves){
            if(move == 'U') up++;
            if(move == 'D') down++;
            if(move == 'L') left++;
            if(move == 'R') right++;
        }
        return (up == down) && (left == right);
    }
};

307. 区域和检索 - 数组可修改

链接: 区域和检索 - 数组可修改
难度: 中等
题目:
题目描述

运行示例:
运行示例

思路:
这道题我本来是用前缀和解决,但是在遇到修改时复杂度会很大,我的时间超过,我看官方解析是采用线段树,这是我之前没接触过的。我参考了知乎的线段树这篇文章以及官方题解。
代码:

class NumArray {
private:
    vector<int> tree;
    int n;
public:
    void build(int l, int r, int p,vector<int> &nums){
        if(l == r){
            tree[p] = nums[l]; 
            return;
        }
        int mid = l + (r - l)/2;
        build(l, mid, p * 2 + 1, nums);
        build(mid+1, r, p * 2 + 2, nums);
        cout<<1<<endl;
        tree[p] = tree[p * 2 + 1]+tree[p * 2 + 2];
    }
    void change(int index, int val, int node, int s, int e) {
        if (s == e) {
            tree[node] = val;
            return;
        }
        int m = s + (e - s) / 2;
        if (index <= m) {
            change(index, val, node * 2 + 1, s, m);
        } else {
            change(index, val, node * 2 + 2, m + 1, e);
        }
        tree[node] = tree[node * 2 + 1] + tree[node * 2 + 2];
    }

    int range(int left, int right, int node, int s, int e) {
        if (left == s && right == e) {
            return tree[node];
        }
        int m = s + (e - s) / 2;
        if (right <= m) {
            return range(left, right, node * 2 + 1, s, m);
        } else if (left > m) {
            return range(left, right, node * 2 + 2, m + 1, e);
        } else {
            return range(left, m, node * 2 + 1, s, m) + range(m + 1, right, node * 2 + 2, m + 1, e);
        }
    }


    NumArray(vector<int>& nums): n(nums.size()), tree(nums.size() * 4)  {
        build(0, n - 1, 0, nums);
    }
    
    void update(int index, int val) {
        change(index, val, 0, 0, n - 1);
    }
    
    int sumRange(int left, int right) {
        return range(left, right, 0, 0, n - 1);
    }
};

309. 买卖股票的最佳时机含冷冻期

链接: 买卖股票
难度: 中等
题目:
题目描述

运行示例:
运行示例

思路:
这道题,我采用的是动态规划。用 f[i]表示第 i 天结束之后的累计最大收益。根据题目描述,由于我们最多只能同时买入(持有)一支股票,并且卖出股票后有冷冻期的限制,因此我们会有三种不同的状态:
我们目前持有一支股票,对应的累计最大收益记为 f[i][0];
我们目前不持有任何股票,并且处于冷冻期中,对应的累计最大收益记为 f[i][1];
我们目前不持有任何股票,并且不处于冷冻期中,对应的累计最大收益记为 f[i][2]。
因此状态转移方程为:
f[i][0]=max⁡(f[i−1][0],f[i−1][2]−prices[i])
f[i][1]=f[i−1][0]+prices[i]
f[i][2]=max⁡(f[i−1][1],f[i−1][2])
代码:

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        if(prices.size() == 0) return 0;
        int n = prices.size();
        vector<vector<int>> f(n,vector<int>(3,0));
        f[0][0] = -prices[0];
        for(int i = 1; i < n; i++){
            f[i][0] = max(f[i - 1][0], f[i - 1][2] - prices[i]);
            f[i][1] = f[i - 1][0] + prices[i];
            f[i][2] = max(f[i - 1][1], f[i - 1][2]);
        }
        return max(f[n-1][1],f[n-1][2]);
    }
};

174. 地下城游戏

链接: 地下城游戏
难度: 困难
题目:
题目描述

运行示例:
运行示例

思路:
这道题根据题意以及限制条件,我们很容易想到需要利用动态规划,但是普通动态规划是从左上到右下,而本题的话我们则需要从右下到左上。dp[i][j] 表示从坐标 (i,j)到终点所需的最小初始值。
代码:

class Solution {
public:
    int calculateMinimumHP(vector<vector<int>>& dungeon) {
        int n = dungeon.size();
        int m = dungeon[0].size();
        vector<vector<int>>dp(n+1,vector<int>(m+1,INT_MAX));
        dp[n][m-1] = dp[n-1][m] = 1;
        for(int i = n-1 ; i >= 0; i--){
            for(int j = m-1; j >= 0; j--){
                int minn = min(dp[i+1][j],dp[i][j+1]);
                dp[i][j] = max(minn-dungeon[i][j],1);
            }
        }
        return dp[0][0];
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/478362.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【开发环境搭建篇】Redis客户端安装和配置

作者介绍&#xff1a;本人笔名姑苏老陈&#xff0c;从事JAVA开发工作十多年了&#xff0c;带过大学刚毕业的实习生&#xff0c;也带过技术团队。最近有个朋友的表弟&#xff0c;马上要大学毕业了&#xff0c;想从事JAVA开发工作&#xff0c;但不知道从何处入手。于是&#xff0…

AST学习入门

AST学习入门 1.AST在线解析网站 https://astexplorer.net/ 1.type: 表示当前节点的类型&#xff0c;我们常用的类型判断方法t.is********(node)**,就是判断当前的节点是否为某个类型。 2**.start**:表示当前节点的开始位置 3.end:当前节点结束 4.loc : 表示当前节点所在的行…

Qt利用反射机制实现函数调用

QT本身就带有强大的反射功能&#xff0c;如果想通过函数名称字符串调用函数&#xff0c;需要在被调用的函数前添加宏&#xff1a;Q_INVOKABLE 父类 QtInvoke.h 头文件&#xff1a; #pragma once #include <QMainWindow> #include "ui_QtInvoke.h" class Qt…

麒麟系统中使用nginx发布项目

1. 安装Nginx sudo apt-get update #进行所有安装操作前都要执行这一句 sudo apt install nginx #出现询问就Yes参考具体 Nginx—在linux的ubuntu系统上的安装使用 2. 修改发布文件 将打包好的dist文件夹中的所有文件覆盖下面这个文件夹中的所有文件 如果出现没有权限替…

UnityShader(十九) AlphaBlend

上代码&#xff1a; Shader "Shader入门/透明度效果/AlphaBlendShader" {Properties{_MainTex ("Texture", 2D) "white" {}_AlphaScale("AlphaScale",Range(0,1))1.0}SubShader{Tags { "RenderType""Transparent&quo…

java数字城管APP系统源码,智慧执法平台,现代信息技术手段的综合管理平台

智慧城管源码&#xff0c;智慧执法&#xff0c;城管智慧综合执法系统源码 智慧城管系统充分利用物联网、云计算、信息融合、网络通讯、数据分析与挖掘等技术&#xff0c;对城市管理进行全方位覆盖。它通过建立城市综合管理平台&#xff0c;将城市的信息和管理资源有机结合起来&…

蓝桥杯day7刷题日记

P8697 [蓝桥杯 2019 国 C] 最长子序列 思路&#xff1a;直接遍历&#xff0c;和子序列相同就记录&#xff0c;不然就下一位 #include <iostream> #include <string> using namespace std; int res;int main() {string s,t;cin>>s>>t;int i0,j0;while…

文生图的基石CLIP模型的发展综述

CLIP的英文全称是Contrastive Language-Image Pre-training&#xff0c;即一种基于对比文本-图像对的预训练方法或者模型。CLIP是一种基于对比学习的多模态模型&#xff0c;CLIP的训练数据是文本-图像对&#xff1a;一张图像和它对应的文本描述&#xff0c;这里希望通过对比学习…

大数据-基础架构设施演进的过程

一、第一阶段-Hadoop 以Hadoop为代表的离线数据处理基础设施 1.1、围绕HDFS和MR&#xff0c;产生了一系列的组件 面向在线KV操作的HBase面向SQL的Hive面向工作流的PIG 1.2、随着对批处理性能要求越来越高&#xff0c;产生了Tez、Spark、Flink等计算引擎。RM模型也逐步进化成…

注册省市要选择你的驾驶证的发证省市

1、首先在手机应用商店&#xff08;任何可以下载软件的&#xff0c;比如360、360&#xff09;搜索流量管理12123&#xff0c;然后下载。 2.然后打开手机上的APP&#xff0c;你会看到下面的页面&#xff0c;然后选择注册&#xff01; 3、在注册页面&#xff0c;根据您的实际情况…

【智能算法】多元宇宙优化算法(MVO)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献 1.背景 2016年&#xff0c;Mirjalili 等人受到宇宙膨胀理论启发&#xff0c;提出了多元宇宙优化算法(Multi-verse Optimization, MVO)。 2.算法原理 2.1算法思想 MVO基于宇宙膨胀的原理&#xff0c;利用…

3新 IT 技术深刻变革,驱动实体经济进入智能化时代

技术进步和创新是实体经济转型升级的内生 源动力&#xff0c;是企业数字化转型的核心工具&#xff0c;有 助于“降本增效提质”目标的达成。自 20 世 纪 90 年代至今&#xff0c;我国快速完成信息化的大规 模建设&#xff0c;典型数字化技术已发展成熟并充分 融合进企业日…

Linux——du, df命令查看磁盘空间使用情况

一、实现原理&#xff1a; df 命令的全称是Disk Free &#xff0c;显而易见它是统计磁盘中空闲的空间&#xff0c;也即空闲的磁盘块数。它是通过文件系统磁盘块分配图进行计算出的。 du 命令的全称是 Disk Used &#xff0c;统计磁盘有已经使用的空间。它是直接统计各文件各目…

2024年人工智能顶级会议投稿信息汇总(数据挖掘领域)

数据挖掘是信息科学领域的重要分支&#xff0c;致力于挖掘和分析庞大数据集中的有价值模式与规律。它融合了统计学、机器学习和数据库技术&#xff0c;目的是从海量数据中抽取有用的知识&#xff0c;辅助决策制定过程。本文首先精选介绍数据挖掘领域内的重要会议&#xff0c;包…

Go语言学习Day1:什么是Go?

名人说&#xff1a;莫道桑榆晚&#xff0c;为霞尚满天。——刘禹锡&#xff08;刘梦得&#xff0c;诗豪&#xff09; 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 1、走近Go①Go语言的Logo②Go语言的创始人③Go语…

在openeuler22.03上安装单机版TIDB 7.6.0

1.查看系统版本是否支持 [rootlocalhost ~]# cat /etc/os-release NAME"openEuler" VERSION"22.03 LTS" ID"openEuler" VERSION_ID"22.03" PRETTY_NAME"openEuler 22.03 LTS" ANSI_COLOR"0;31"[rootlocalhost ~…

Elasticsearch面试系列-03

1. Elasticsearch 中 refresh 和 flush 有什么区别? 整体流程: 1、数据写入buffer缓冲和translog日志文件中。当写一条数据document的时候,一方面写入到mem buffer缓冲中,一方面同时写入到translog日志文件中。 2、buffer满了或者每隔1秒(可配),refresh将mem buffer中的…

(20)C#添加微信群成员为好友-微信UI自动化(.Net)

往期知识回顾 (1)C#开启探索微信自动化之路-微信UI自动化 (2)C#创建微信窗体自动化实例-微信UI自动化 (3)C#针对系统热键管理-微信UI自动化 (4)C#采集微信通讯录和联系人-微信UI自动化 (5)C#实现针对微信窗体鼠标静默点击-微信UI自动化 (6)C#搜索微信通讯录联系人-微信UI…

电脑桌面记事本备忘录哪个好用?好用的桌面备忘录推荐

在忙碌的工作间隙&#xff0c;我常常需要随手记录一些重要的想法或待办事项。每当这时&#xff0c;我都希望我的记事本备忘录能够如影随形&#xff0c;方便我随时打开、随时记录。可是&#xff0c;常规的记事本软件往往隐藏在电脑的角落&#xff0c;每次需要时都得费力地寻找&a…

解决Matplotlib 画图中文无法正常显示的问题(显示方框)

解决Matplotlib 画图中文无法正常显示的问题&#xff08;显示方框&#xff09; 错误描述解决方案一&#xff08;暂时解决&#xff09;解决方法二&#xff08;永久解决&#xff09;测试代码 错误描述 这个错误消息来自于使用 Python 的 IPython 环境&#xff0c;特别是在尝试输出…
最新文章