秋招突击——算法练习——复习{双指针:移动零、盛最多的水、三数之和}——新作{接雨水}

news2024/11/16 23:38:37

文章目录

    • 引言
    • 复习
      • 移动零
      • 盛最多的水
      • 三数之和
    • 新作
      • 接雨水
        • 个人实现
        • 参考实现
    • 总结

引言

  • 这段时间还是很迷茫的,秋招到了一个阶段,但是收获并不是很多,基本上都在泡池子,没有意向。也就没有在坚持刷题,只是整理一些专门的知识点。
  • 现在也想明白了,还是得好好刷题,继续找工作,总归能找到的,急也没用。一个一个面,一个一个总结吧!
  • 把hot100再过一遍!

复习

移动零

在这里插入图片描述

class Solution {
    public void moveZeroes(int[] nums) {
        int zeroIdx= 0;
        for(int i = 0;i < nums.length;i ++){
            if(nums[i] != 0){
                nums[zeroIdx ++] = nums[i];
            }
        }
        while(zeroIdx < nums.length)    nums[zeroIdx ++] = 0;
        
    }
}

盛最多的水

  • 这个怎么证明的,又忘记了,想想看!只记得怎么移动左右指针,然后具体的推导就不知道了。
  • 具体的数学推论还是有点混乱,不过大概的思路还是好记得,因为影响最终结果的始终是那个较短的边,直接移动短边就行了!
class Solution {
    public int maxArea(int[] height) {
        int l = 0;
        int r = height.length - 1;
        int res = 0;
        while (l <= r) {
            res = Math.max(res, Math.min(height[l], height[r]) * (r - l ));
            if ( height[l] < height[r])
                l++;
            else
                r--;
        }

        return res;

    }
}

在这里插入图片描述

三数之和

  • 有点丢人了,这个题目已经做了四五遍,还是出了问题

  • 出现了元素的重复,是因为双指针,左右指针不应该相交,左指针应该始终小于右指针。
    在这里插入图片描述

  • 修改完之后

class Solution {
    public List<List<Integer>> threeSum(int[] nums) {
        Arrays.sort(nums);
        List<List<Integer>> res = new ArrayList<>();
        for (int i = 0; i < nums.length; i++) {
            if (i != 0 && nums[i] == nums[i - 1])
                continue;
            for (int l = i + 1, r = nums.length - 1; l < r; l++) {
                if (l != i + 1 && nums[l] == nums[l - 1])
                    continue;
                while (r -1 > l && nums[l] + nums[r - 1] + nums[i] >= 0)
                    r--;
                if (nums[l] + nums[r] + nums[i] == 0) {
                    res.add(Arrays.asList(nums[i], nums[l], nums[r]));
                }
            }
        }
        return res;
    }
}

在这里插入图片描述

新作

接雨水

在这里插入图片描述
题目链接

个人实现

思路分析

  • 找到坑,先是单调递减序列,然后再试单调递增序列。
  • 没有任何思路,还是看题解
参考实现

在这里插入图片描述
在这里插入图片描述

  • 下面是逐个弹出元素后的计算过程
    • 计算对应的区域A的面积

在这里插入图片描述

  • 弹出第二个元素,然后在计算区域B的面积

在这里插入图片描述

  • 在往后移动一个元素,然后在弹出新的元素,具体如下如,计算区域C的面积

在这里插入图片描述

  • 这里使用单调栈实现,每一次弹出元素的时候,更新一下对应的元素

具体逻辑如下

  • 如果当前元素小于栈顶元素或者栈为空
    • 直接入栈
  • 如果当前元素大于等于栈顶元素
    • 弹出一个元素,计算一下邻接面积,宽度是当前元素减去左边界,高度是栈顶元素减去已经计算的last面积
    • 然后last在更新
class Solution {
    public int trap(int[] height) {
        Deque<Integer> stk = new ArrayDeque<>();
        int resVol = 0;
        for(int i = 0 ;i < height.length;i ++){
            int last = 0;
            // 循环中的代码计算的是A区域的面积
            while(!stk.isEmpty() && height[i] >= height[stk.peek()])
           {
                resVol += (height[stk.peek()]  - last) * (i - stk.peek() - 1);
                last = height[stk.peek()];
                stk.pop();                
            }
			
			// 计算的是区域B的代码,也就是更新之后的代码,当前元素小于栈顶的元素
            if(!stk.isEmpty())  resVol +=  (i - stk.peek() - 1) * (height[i] - last) ;
            stk.push(i);
        }
        return resVol;
    }
}

在这里插入图片描述

总结

  • 继续准备面试吧,目前还是0offer,有点焦虑了,继续准备吧!
  • 准备得那么久了,难受呀!不过还是继续冲吧!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Arduino UNO R3自学笔记15 之 Arduino如何驱动数码管?

注意&#xff1a;学习和写作过程中&#xff0c;部分资料搜集于互联网&#xff0c;如有侵权请联系删除。 前言&#xff1a;学习使用数码管。 1.数码管介绍 数码管的一种是半导体发光器件&#xff0c;数码管可分为七段数码管和八段数码管&#xff0c;区别在于八段数码管比七段数…

【数据结构】图论基础

文章目录 图的概念图的基本概念图的类型图的表示方法 图的相关基本概念1. 路径&#xff08;Path&#xff09;2. 连通性&#xff08;Connectivity&#xff09;3. 图的度&#xff08;Degree&#xff09;4. 子图&#xff08;Subgraph&#xff09;5. 生成树&#xff08;Spanning Tr…

LabVIEW提高开发效率技巧----快速实现原型和测试

在LabVIEW开发中&#xff0c;DAQ助手&#xff08;DAQ Assistant&#xff09;和Express VI为快速构建原型和测试功能提供了极大的便利&#xff0c;特别适合于简单系统的开发和早期验证阶段。 DAQ助手&#xff1a;是一种可视化配置工具&#xff0c;通过图形界面轻松设置和管理数据…

CSS3渐变

一、线性渐变 通过background-image: linear-gradient(...)设置线性渐变 语法&#xff1a; linear-gradient(direction,color1,color2, . . ) direction&#xff1a;渐变方向&#xff0c;默认从上到下&#xff0c;可选值&#xff1a; 简单选取&#xff1a; ① to right&…

Python和C++及MATLAB和R时间序列中数学物理金融气象运动和电子材料

&#x1f3af;要点 小波分析&#xff0c;量化噪声概率分布和统计推理物理量和化学量数值计算确定性非线性系统金融资本市场和市场流动性波形传播气象建模评估 Python时间序列数学 时间序列分析是一种强大的统计技术&#xff0c;广泛应用于经济学、金融学、环境科学和工程学…

基于SSM+Vue技术的定制式音乐资讯平台

文未可获取一份本项目的java源码和数据库参考。 一、选题的背景与意义&#xff1a; 随着个人计算机的普及和互联网技术的日渐成熟&#xff0c;网络正逐渐成为人们获取信息及消费的主要渠道。然而在当前这个信息时代&#xff0c;网络中的信息种类和数量呈现爆炸性增长的趋势&a…

基于Node.js+Express+MySQL+VUE实现的在线电影视频点播网站管理系统的设计与实现部署安装

目录 1. 引言 1.1开发背景 1.2开发意义 1.3国内外研究 2. 需求分析 3. 系统架构设计 4. 关键技术选型 5. 功能模块设计 5.1功能图 5.2界面介绍 6. 总结 1. 引言 随着互联网技术的快速发展和普及&#xff0c;人们获取信息的方式发生了巨大变化&#xff0c;其中在…

PCL库简单的icp配准

#include <pcl/io/pcd_io.h> #include <pcl/point_types.h> #include <pcl/registration/icp.h>int main(int argc, char** argv) {// 确保提供了两个PCD文件作为输入if (argc ! 3) {PCL_ERROR("请提供两个PCD文件作为输入。\n");return (-1);}// …

dcatadmin 自定义登录页面

一、问题&#xff1a; 在后台管理系统中&#xff0c;不同的项目想要不同的登录页面&#xff0c;但是框架自带的登录页面就只有一个。 解决&#xff1a; 由芒果系统改造的dcatadmin登录插件&#xff0c;实现一键安装改变登录页面。 项目介绍 基于Laravel和Vue的快速开发的后台管…

html5 + css3(上)

目录 HTML认知web标准vscode的简介和使用注释标题和段落换行和水平线标签文本格式化标签图片图片-基本使用图片-属性 绝对路径相对路径音频标签视频标签超链接 HTML基础列表列表-无序和有序列表-自定义 表格表格-使用表格-表格标题和表头单元格表格-结构标签&#xff08;了解&a…

CentOS 6文件系统

由冯诺依曼在 1945 年提出的计算机五大组成部分&#xff1a;运算器&#xff0c;控制器&#xff0c;存储器&#xff0c;输入设 备&#xff0c;输出设备。 1. 硬盘结构&#xff1a; &#xff08;1&#xff09;机械硬盘结构&#xff1a; 磁盘拆解图&#xff1a; 扇区&#xff0c;…

白杨SEO:抖音上做自然搜索流量怎么挖掘出抖音流量关键词及布局进去?【举例】

前言&#xff1a;为什么想到再分享这个&#xff1f;因为发现很多人在抖音做搜索流量时怎么挖掘抖音关键词这个基础以及怎么布局进去不太清楚&#xff0c;所以再来写下&#xff0c;希望对大家有帮助。 文章大纲&#xff1a; 1、抖音搜索流量如何确定业务词&#xff1f; 2、抖音…

Ubuntu下安装Zookeeper集群

Zookeeper集群是一个开源的分布式协调服务系统&#xff0c;它由Apache软件基金会维护&#xff0c;旨在为分布式应用提供一致性和可靠性的服务。 在Zookeeper集群中&#xff0c;服务器可以扮演三种角色——领导者&#xff08;Leader&#xff09;、跟随者&#xff08;Follower&a…

开放式耳机哪个品牌好?值得选购的开放式蓝牙耳机推荐

2024年&#xff0c;蓝牙耳机市场迎来了开放式耳机的热潮。但其实对于许多消费者来说&#xff0c;如何选择合适的开放式耳机仍然充满疑问&#xff1a;佩戴稳固舒适的开放式耳机应该怎么选择&#xff1f;开放式耳机的蓝牙版本该怎么选择&#xff1f;又有哪些开放式耳机品牌是可靠…

SkyWalking 高可用

生产环境中,后端应用需要支持高吞吐量并且支持高可用来保证服务的稳定,因此需要高可用集群管理。 集群方案 Skywalking集群是将 skywalking oap 作为一个服务注册到nacos上,只要skywalking oap服务没有全部宕机,保证有一个skywalking oap在运行,就可以提供服务。 高可用…

【mmsegmentation】Loss模块(进阶)自定义自己的LOSS

1、定义自己的loss driving\models\losses\shuai_loss.py import torch from torch import nn from mmseg.models import LOSSESLOSSES.register_module() class ShuaiLoss(nn.Module):def __init__(self,loss_weight1.0):super().__init__()self.ce_loss nn.CrossEntropyLo…

躺平成长:微信小程序运营日记第二天

在进行属于生活的开源之后&#xff0c;自己更加感受到自己存在的渺茫&#xff0c;同时更加开始深刻领会&#xff0c;开源的重要性&#xff0c;在开源&#xff0c;开放&#xff0c;创造&#xff0c;再创新的思维模式下&#xff0c;不发布八部金刚功相关的训练视频&#xff0c;自…

详解Java中的Collection单列集合(从底层到用法超详细解析和细节分析)

⭕在 Java 中&#xff0c;集合框架是开发过程中最常用的数据结构之一&#xff0c;其中 Collection 接口是整个集合框架的基础。Collection 是处理单列数据的接口&#xff0c;它定义了一些通用的操作&#xff0c;允许对一组对象进行操作。今天我们将深入介绍 Java 中的单列集合 …

ECharts图表图例4

jave 用eclipse软件 代码&#xff1a; <!DOCTYPE html> <html> <head> <meta charset"UTF-8"> <!-- 引入ECharts脚本 --> <script src"js/echarts.js"></script> <title>绘制堆积面积图</title&g…

Unraid的cache使用btrfs或zfs?

Unraid的cache使用btrfs或zfs&#xff1f; 背景&#xff1a;由于在unraid中添加了多个docker和虚拟机&#xff0c;因此会一直访问硬盘。然而&#xff0c;单个硬盘实在难以让人放心。在阵列盘中&#xff0c;可以通过添加校验盘进行数据保护&#xff0c;在cache中无法使用xfs格式…