每日5题Day9 - LeetCode 41 - 45

每一步向前都是向自己的梦想更近一步,坚持不懈,勇往直前!

第一题:41. 缺失的第一个正数 - 力扣(LeetCode)

今天这道题没有ac,写不动了,下次再通过吧,先给个半成品下次回来改掉

class Solution {
    public int firstMissingPositive(int[] nums) {
        //使用掩码来做吧,通过$与|来记录一下各个数是否有出现
        int mask = 0;
        int n = nums.length;
        // 将正整数放置到对应的位置
        for (int num : nums) {
            if (num > 0 && num <= n) {
                mask |= (1 << (num - 1));
            }
        }
        // 找到第一个缺失的正整数
        for (int i = 0; i < n; i++) {
            if ((mask & (1 << i)) == 0) {
                return i + 1;
            }
        }
        // 如果数组中包含了1到n之间的所有正整数,则缺失的是n+1
        return n + 1;
    }
}


第二题:42. 接雨水 - 力扣(LeetCode)

class Solution {
    public int trap(int[] height) {
        //单调站的传统题
        Deque<Integer> deque = new ArrayDeque<>();
        int res = 0;
        for(int i = 0; i < height.length; i++){
            while(!deque.isEmpty() && height[i] > height[deque.peekLast()]){
                int tmp = deque.pollLast();
                if(!deque.isEmpty()){
                    //注意宽和高是如何得到的
                    int h = Math.min(height[deque.peekLast()], height[i]) - height[tmp];
                    int w = i - deque.peekLast() - 1;
                    res += h * w;
                }
            }
            deque.offerLast(i);
        }
        return res;
    }
}

第三题:43. 字符串相乘 - 力扣(LeetCode)

class Solution {
    public String multiply(String num1, String num2) {
        //直接模拟就好
        int m = num1.length();
        int n = num2.length();
        int[] result = new int[m + n]; // 保存每一位的乘积结果
        // 逐位相乘,注意从个位加至高位
        for (int i = m - 1; i >= 0; i--) {
            for (int j = n - 1; j >= 0; j--) {
                int mul = (num1.charAt(i) - '0') * (num2.charAt(j) - '0'); // 乘积
                int sum = mul + result[i + j + 1]; // 加上当前位的值
                result[i + j] += sum / 10; // 进位
                result[i + j + 1] = sum % 10; // 当前位的结果
            }
        }
        // 将结果数组转换为字符串
        StringBuilder sb = new StringBuilder();
        for (int digit : result) {
            if (!(sb.length() == 0 && digit == 0)) { // 忽略结果数组的前导零
                sb.append(digit);
            }
        }
        return sb.length() == 0 ? "0" : sb.toString();
    }
}

第四题:44. 通配符匹配 - 力扣(LeetCode)

本题借用:【宫水三叶】的思路来解决的

class Solution {
    public boolean isMatch(String ss, String pp) {
        int n = ss.length(), m = pp.length();
        // 技巧:往原字符头部插入空格,这样得到 char 数组是从 1 开始,而且可以使得 f[0][0] = true,可以将 true 这个结果滚动下去
        ss = " " + ss;
        pp = " " + pp;
        char[] s = ss.toCharArray();
        char[] p = pp.toCharArray();
        // f(i,j) 代表考虑 s 中的 1~i 字符和 p 中的 1~j 字符 是否匹配
        boolean[][] f = new boolean[n + 1][m + 1];
        f[0][0] = true;
        for (int i = 0; i <= n; i++) {
            for (int j = 1; j <= m; j++) {
                if (p[j] == '*') {
                    //注意这个地方逻辑的判断:
                    //条件一:不加'*'时的情况:f[i][j - 1]
                    //条件二:(i - 1 >= 0 && f[i - 1][j])
                    //满足其一即可为true
                    f[i][j] = f[i][j - 1] || (i - 1 >= 0 && f[i - 1][j]);
                } else {
                    //当字符为'?'时的判断逻辑,肯定要前面也满足true
                    f[i][j] = i - 1 >= 0 && f[i - 1][j - 1] && (s[i] == p[j] || p[j] == '?');
                }
            }
        }
        return f[n][m];
    }
}

 第五题:45. 跳跃游戏 II - 力扣(LeetCode)

class Solution {
    public int jump(int[] nums) {
        //不dp了,可以直接贪心策略实现,少用点空间
        if(nums.length == 0 || nums.length == 1){
            return 0;
        }
        int cnt = 0, curlen = 0, maxlen = 0;
        for(int i = 0; i < nums.length; i++){
            maxlen = Math.max(maxlen, i + nums[i]);
            if(maxlen >= nums.length - 1){
                cnt++;
                break;
            }
            if(i == curlen){
                curlen = maxlen;
                cnt++;
            }
        }
        return cnt;
    }
}

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

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

相关文章

微信小程序画布显示图片绘制矩形选区

wxml <view class"page-body"><!-- 画布 --><view class"page-body-wrapper"><canvas canvas-id"myCanvas" type"2d" id"myCanvas" classmyCanvas bindtouchstart"touchStart" bindtouchmo…

HackTheBox-Machines--Bank

文章目录 0x01 信息收集0x02 文件上传漏洞利用0x03 权限提升方法一&#xff1a;SUID提权方法二&#xff1a;配置不当提权 Bank 测试过程 0x01 信息收集 1.端口扫描 发现 ssh(22)、DNS(53)、HTTP(80) 端口 nmap -sC -sV 10.129.29.200访问 80 端口&#xff0c;页面为Apache2 U…

数据挖掘与机器学习——机器学习概述

一、什么是机器学习 机器学习的英文名称叫Machine Learning&#xff0c;简称ML&#xff0c;该领域主要研究的是如何使计算机能够模拟人类的学习行为从而获得新的知识。 机器学习与数据挖掘的联系&#xff1a;简单来说&#xff0c;机器学习就是让计算机从大量 的数据中学习到相关…

软管的高速非接触外径测量方案!单双轴测径仪多种类型!

一、传统测量方式的局限 在软管外径的测量领域&#xff0c;传统方式往往面临多重挑战&#xff1a; 1、挤压变形&#xff1a;传统的测量方式可能导致软管因挤压而变形&#xff0c;进而影响测量数据的准确性。 2、人为误差&#xff1a;测量结果常因人为因素而有所差异&#xff0c…

Embase生物医学文摘数据库文献全文去哪里查找下载

Embase是生物医学与药理学文摘数据库&#xff0c;是爱思唯尔&#xff08;Elsevier&#xff09;推出的针对生物医学和药理学领域信息所提供的基于网络的数据检索服务。它将1974年以来的生物医学记录与 900 多万条独特的Medline&#xff08;1950 年以来&#xff09;的记录相结合&…

智慧社区管理系统:打造便捷、安全、和谐的新型社区生态

项目背景 在信息化、智能化浪潮席卷全球的今天&#xff0c;人们对于生活品质的需求日益提升&#xff0c;期待居住环境能与科技深度融合&#xff0c;实现高效、舒适、安全的生活体验。在此背景下&#xff0c;智慧社区管理系统应运而生&#xff0c;旨在借助现代信息技术手段&…

go ast语义分析实现指标计算器

什么是AST 首先我们要知道AST是什么&#xff08;Abstract Syntax Tree&#xff0c;AST&#xff09;&#xff0c;简称为语法树&#xff0c;是go语言源代码语法结构的一种抽象表示。它以树状的形式表现编程语言的语法结构&#xff0c;树上的每个节点都表示源代码中的一种结构。 …

docker -JDK8安装

文章目录 前言docker -JDK8安装1. 新建一个 Docker 容器2. 在容器中安装和配置 JDK 8 前言 如果您觉得有用的话&#xff0c;记得给博主点个赞&#xff0c;评论&#xff0c;收藏一键三连啊&#xff0c;写作不易啊^ _ ^。   而且听说点赞的人每天的运气都不会太差&#xff0c;实…

Python-温故知新

1快速打开.ipynb文件 安装好anaconda后&#xff0c;在需要打开notebook的文件夹中&#xff0c; shift键右键——打开powershell窗口——输入jupyter notebook 即可在该文件夹中打开notebook的页面&#xff1a; 2 快速查看函数用法 光标放在函数上——shift键tab 3...

AI日报|腾讯,科大讯飞加入百模价格战,黄仁勋预言AGI或五年内出现,DeepL获3亿融资...

文章推荐 AI晚报&#xff5c;微软Copilot全家桶造福十亿打工人&#xff0c;李开复称大模型狂降价是双输... 阿里通义降价&#xff0c;百度文心免费&#xff0c;一图对比谁是最具性价比大模型&#xff1f; 百模价格战愈发激烈&#xff1a;腾讯混元-lite模型价格调整为全面免费…

中霖教育怎么样?二建继续教育几年一次?

中霖为大家介绍&#xff1a; 根据相关规定&#xff0c;二级建造师执业资格注册证书设定有效期限为三年。为确保持证人员的专业能力&#xff0c;在规定的期限内需要完成规定的继续教育课程并参加考核&#xff0c;以此来维护其职业资质的连续性。 在执业资格证书的有效期满前&a…

设计模式7——建造者模式

写文章的初心主要是用来帮助自己快速的回忆这个模式该怎么用&#xff0c;主要是下面的UML图可以起到大作用&#xff0c;在你学习过一遍以后可能会遗忘&#xff0c;忘记了不要紧&#xff0c;只要看一眼UML图就能想起来了。同时也请大家多多指教。 建造者模式&#xff08;Builde…

Ubuntu23.04开机时whoopsie-upload-all占用CPU 100%,风扇狂转

Ubuntu23.04开机时&#xff0c;风扇狂转散热&#xff0c;打开终端&#xff0c;输入top -c&#xff0c;查看占用cpu最高的进程&#xff0c;发现是python3在执行whoopsie-upload-all脚本文件。 什么是whoopsie&#xff1f; 这是“Ubuntu错误报告”守护程序&#xff0c;默认安装在…

FedSyn: Synthetic Data Generation using Federated Learning

arxiv2022&#xff0c;没找到是哪个刊物的&#xff0c;是没投中吗&#xff1f; 这篇是用GAN做数据生成&#xff0c;每个client都训练一个生成器&#xff0c;加噪声传到server端聚合&#xff0c;实验是衡量生成图片的质量。 论文地址&#xff1a;arxiv code&#xff1a;没找到 …

如何在web页面下做自动化测试?

自动化测试是一种通过编写脚本来执行测试用例的方法&#xff0c;可以提高测试效率和准确性。在web页面下进行自动化测试&#xff0c;需要使用适当的工具和技术来实现。 下面将介绍一种从零开始进行web页面自动化测试的方法。 1. 环境准备 首先&#xff0c;需要准备好测试环境…

正确认识IP地址和子网掩码的联系

IP地址和子网掩码是计算机网络中两个非常重要的概念&#xff0c;它们共同确定了设备在局域网中的地址以及该地址所属的子网&#xff0c;只要两者结合&#xff0c;就能确定唯一地址IP66_ip归属地在线查询_免费ip查询_ip精准定位平台。 IP地址是用于标识计算机网络中的每台设备的…

JetLinks物联网平台在windows 7搭建(前后端)部署教程

近期对接TCP、modbusTCP等自定义解析&#xff0c;做了很多万能解析的方法&#xff0c;却都不遂人意&#xff0c;而一直在用的ThingsBoard不能直接对接TCP透传(企业版除外)&#xff0c;需要在外围做一些自定义解析&#xff0c;然后转json再mqtt上传&#xff0c;感觉来说比较麻烦…

Firewalld 防火墙基础

Firewalld概述 Firewalld和iptables的区别 Firewalld网络区域 Firewalld防火墙的配置方法 Firewalld防火墙概述 Firewalld是一个在Linux系统上提供动态管理防火墙功能的工具。 以下是Firewalld的一些主要特点和功能&#xff1a; 动态管理: Firewalld允许在运行时添加、移除…

K8s Service 背后是怎么工作的?

kube-proxy 是 Kubernetes 集群中负责服务发现和负载均衡的组件之一。它是一个网络代理&#xff0c;运行在每个节点上, 用于 service 资源的负载均衡。它有两种模式&#xff1a;iptables 和 ipvs。 iptables iptables 是 Linux 系统中的一个用户空间实用程序&#xff0c;用于…

ipad air6电容笔推荐,2024十大高性价比电容笔排行榜!

​电容笔作为ipad的最佳拍档&#xff0c;为学生党和打工人带来了极大的便利&#xff0c;二者搭配效率真的大大提升&#xff0c;但是&#xff0c;如何选购一支适合自己的电容笔呢&#xff1f;作为一个对数码设备非常感兴趣并且有一定了解的人&#xff0c;我根据自己多年的使用经…