力扣爆刷第168天之TOP200五连刷106-110(每日温度单调栈、盛水最多滑动窗口、全排列回溯)

news2025/1/11 14:17:54

力扣爆刷第168天之TOP200五连刷106-110(每日温度单调栈、盛水最多滑动窗口、全排列回溯)

文章目录

      • 力扣爆刷第168天之TOP200五连刷106-110(每日温度单调栈、盛水最多滑动窗口、全排列回溯)
      • 一、138. 随机链表的复制
      • 二、739. 每日温度
      • 三、136. 只出现一次的数字
      • 四、11. 盛最多水的容器
      • 五、47. 全排列 II

一、138. 随机链表的复制

题目链接:https://leetcode.cn/problems/copy-list-with-random-pointer/description/
思路:本题求的是随机链表的复制,其实就是把链表复制一份出来,但是要求深拷贝,其实也很简单,需要先把链表next的这一条链给复制一遍,并且在复制的过程中用map进行记录,原链表节点为key,拷贝链表节点为value,这样在复制完next链以后,再遍历一遍原链表的每一个节点的random,就可以利用map找到在拷贝链表中对应的节点。
在这里插入图片描述

class Solution {
    public Node copyRandomList(Node head) {
        Map<Node, Node> map = new HashMap<>();
        Node root = new Node(-1);
        Node p1 = head, p2 = root;
        while(p1 != null) {
            p2.next = new Node(p1.val);
            p2 = p2.next;
            map.put(p1, p2);
            p1 = p1.next;
        }
        p1 = head;
        p2 = root.next;
        while(p1 != null) {
            p2.random = map.get(p1.random);
            p1 = p1.next;
            p2 = p2.next;
        }
        return root.next;
    }
}

二、739. 每日温度

题目链接:https://leetcode.cn/problems/daily-temperatures/description/
思路:求对于每一天来说,下一个大于今天温度的天,在几天之后,让求这个。一看就是使用单调栈,本质上维护一个从栈底到栈顶单调递减的栈,如果当前元素的值大于栈顶了,那么栈顶出栈,对于栈顶元素来说,外面的这个元素就是第一个大于他的,然后还要继续出栈,直到栈内没有小于外部元素的元素即可。

class Solution {
    public int[] dailyTemperatures(int[] temperatures) {
        int len = temperatures.length;
        int[] res = new int[len];

        LinkedList<Integer> stack = new LinkedList<>();
        for(int i = 0; i < len; i++) {
            while(!stack.isEmpty() && temperatures[i] > temperatures[stack.peek()]) {
                int t = stack.pop();
                res[t] = i - t;
            }
            stack.push(i);
        }
        return res;
    }
}

三、136. 只出现一次的数字

题目链接:https://leetcode.cn/problems/single-number/description/
思路:本题是一个利用运算符的题,只有一个元素出现一次,其他都出现两次,那么可以利用异或的特性,相同为0,不同为1。
举个例子:
1 1 0、0 0 1、 1 1 0一共三个数:
1 1 0 ^ 0 0 1 = 1 1 1;
1 1 1 ^ 1 1 0 = 0 0 1.

class Solution {
    public int singleNumber(int[] nums) {
        int res = 0;
        for(int n : nums) {
            res ^= n;
        }
        return res;
    }
}

四、11. 盛最多水的容器

题目链接:https://leetcode.cn/problems/container-with-most-water/
思路:求左右边界与x轴围起来的最大面积,不同与接雨水,本题只需要维护一个最大的滑动窗口,不断记录窗口面积,如果左边界小于右边界,那么可以把左边界向右移动,如果右边界小于左边界,那么可以把右边界向左移动。这样当左右边界相遇,在过程中一定记录下来了最大窗口面积。

class Solution {
    public int maxArea(int[] height) {
        int left = 0, right = height.length-1;
        int max = 0;
        while(left < right) {
            max = Math.max(max, Math.min(height[left], height[right]) * (right - left));
            if(height[left] <= height[right]) left++;
            else right--;
        }
        return max;
    }
}

五、47. 全排列 II

题目链接:https://leetcode.cn/problems/permutations-ii/description/
思路:我先把回溯题的心法写在下面:
回溯类型的题目一共就分两类:组合和排列。
然后又细分为:
①、元素无重,不可复选。
②、元素可重,不可复选。
③、元素无重,可复选。
本题是排列,而且有重复元素,不可复选,那么可以排列一下,又因为是排序,不需要指定起始位置,每次递归遍历都是从0开始,所以需要纵向去重,避免单个元素重复使用。另外又因为数组本身就有重复元素,如果1 1 2,排列之后会出现 第一个1和第二个1,与,第二个1和第一个1.那么需要横向去重,这个是需要排序使用的。

class Solution {
    List<List<Integer>> res = new ArrayList<>();
    List<Integer> list = new ArrayList<>();
    boolean[] flag;
    public List<List<Integer>> permuteUnique(int[] nums) {
        Arrays.sort(nums);
        flag = new boolean[nums.length];
        backTracking(nums);
        return res;
    }
    
    void backTracking(int[] nums) {
        if(list.size() == nums.length) {
            res.add(new ArrayList(list));
            return;
        }
        for(int i = 0; i < nums.length; i++) {
            if(flag[i] || (i > 0 && nums[i] == nums[i-1]) && !flag[i-1]) continue;
            flag[i] = true;
            list.add(nums[i]);
            backTracking(nums);
            flag[i] = false;
            list.remove(list.size()-1);
        }
    }
}

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

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

相关文章

⌈ 传知代码 ⌋ 记忆注意力用于多模态情感计算!

&#x1f49b;前情提要&#x1f49b; 本文是传知代码平台中的相关前沿知识与技术的分享~ 接下来我们即将进入一个全新的空间&#xff0c;对技术有一个全新的视角~ 本文所涉及所有资源均在传知代码平台可获取 以下的内容一定会让你对AI 赋能时代有一个颠覆性的认识哦&#x…

【TS】TypeScript数组类型:掌握数据集合的类型安全

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 TypeScript数组类型&#xff1a;掌握数据集合的类型安全引言1. TypeScript数组类…

Three.js结合物理引擎实现掉落效果

<template> </template><script setup> import * as THREE from three import gsap from gsap //导入轨道控制器 import { OrbitControls } from three/examples/jsm/controls/OrbitControls // 导入 dat.gui import { GUI } from three/addons/libs/lil-gui…

好用的抠图软件在哪里找?这篇文章就有几款好用的抠图工具

在图像处理的世界中&#xff0c;抠图技术无疑是一项至关重要的技能。 无论是设计师、摄影师还是普通的图像编辑爱好者&#xff0c;都可能需要从一张图片中精确地分离出某个对象或元素。但是&#xff0c;手动抠图不仅耗时而且技术要求高&#xff0c;这时候&#xff0c;一款优秀…

PTrade常见问题系列17

是否支持量化帐号的指定服务器分发? 是否可以支持部分量化帐号不根据原有分发规则&#xff0c;而是直接指定分发&#xff1f; 1、若需要增加VIP服务器专用于新增的帐号进行分配&#xff0c;可以参考【量化】量化Nginx用户指定服务器处理步骤.docx&#xff1b; 2、若所有服务…

【音视频之SDL2】Windows配置SDL2项目模板

文章目录 前言 SDL2 简介核心功能 Windows配置SDL2项目模板下载SDL2编译好的文件VS配置SDL2 测试代码效果展示 总结 前言 在开发跨平台的音视频应用程序时&#xff0c;SDL2&#xff08;Simple DirectMedia Layer 2&#xff09;是一个备受欢迎的选择。SDL2 是一个开源库&#x…

“AI+”时代,人工智能前景怎么样?

随着“互联网”到“AI”的转型&#xff0c;时代发展迎来了新的阶段。 在政策、技术和市场的三重驱动之下&#xff0c;人工智能正在快速响应各领域的广泛诉求。虽然人工智能的兴起“打消”了一些传统领域的念想&#xff0c;但同时也开辟了更加多元化的市场。 当下互联网大厂人…

AgentBench: Evaluating LLMs As Agents

AgentBench: Evaluating LLMs As Agents Github&#xff1a; https://github.com/THUDM/AgentBench 榜单&#xff1a;https://llmbench.ai/agent/data demos&#xff1a;https://llmbench.ai/agent/demo 备注&#xff1a;该论文介绍为AgentBench v0.2版本 一、介绍 现如今&am…

计算机网络01

文章目录 浏览器输入URL后发生了什么&#xff1f;Linux 系统是如何收发网络包的&#xff1f;Linux 网络协议栈Linux 接收网络包的流程Linux 发送网络包的流程 浏览器输入URL后发生了什么&#xff1f; URL解析 当在浏览器中输入URL后&#xff0c;浏览器首先对拿到的URL进行识别…

sdwan

分支互联网络解决方案 - 华为企业业务 分支互联网络解决方案 随着5G、AI、物联网等新兴技术与云紧密结合&#xff0c;企业业务智能化和云化加速。 企业分支WAN流量激增&#xff0c;传统以MPLS专线为主的广域互联网络难以支撑业务发展。SD-WAN成为应对云时代的必然选择。 SD…

将 magma example 改写成 cusolver example eqrf

1&#xff0c;简单安装Magma 1.1 下载编译 OpenBLAS $ git clone https://github.com/OpenMathLib/OpenBLAS.git $ cd OpenBLAS/ $ make -j DEBUG1 $ make install PREFIX/home/hipper/ex_magma/local_d/OpenBLAS/1.2 下载编译 magma $ git clone https://bitbucket.org/icl…

专业且免费的重复文件查找与删除工具,文本,图片,音频和视频等

AllDup是一款专业的重复文件查找与删除工具。作为一款免费软件&#xff0c;AllDup以其出色的功能和简洁的操作界面广受欢迎。它不仅可以有效地识别和删除电脑硬盘以及外部设备如USB闪存驱动器中的重复文件&#xff0c;还能对多媒体文件如图片、音频和视频等进行特殊处理&#x…

GUI图形化界面操作(下部)

目录 ​编辑 前言 Swing 窗口 注意点 新增的组件 进度条组件 开关按钮 多面板和分割面板 多面板 分割面板 ​编辑 选项窗口 对话框带三个选项是&#xff0c;否&#xff0c;取消。 对话框提示输入文本: 前言 修炼中&#xff0c;该篇文章为俺很久前的学习笔记 Swi…

Tomcat的安装配置教程

一、服务器的安装 tomcat官方安装网站&#xff1a;http://tomcat.apache.org/ 点击选择想要安装的版本 选择与本机的字节匹配的压缩包进行安装 二、 环境配置 打开系统 进行高级系统配置 配置环境变量 新建系统变量 增加新变量&#xff0c;复制tomcat文件的安装路径为…

HTML,CSS,JavaScript实现——井字棋游戏

和大家分享一个经典的游戏项目——井字棋游戏。这个项目不仅能带你回味童年的乐趣&#xff0c;还能帮助你练习 HTML、CSS 和 JavaScript 编程。 项目介绍 井字棋游戏是一个两人对战游戏&#xff0c;玩家轮流在一个3x3的网格上标记 X 或 O。先将三个标记连成一条直线&#xff…

彻底解决Google浏览器自动删除下载文件或下载失败

需求背景 最近发现在阿里巴巴国际站聊天过程中,客户发的文件或软件,Goole浏览器居然无法下载,或者下载一会就提示失败,莫名其妙。错误提示如下:仔细看发现是【已拦截未经验证的下载内容】。 解决方案: 1、打开浏览器设置 2、打开隐私安全 3、配置安全浏览 4、配置完成-…

面试:CUDA Tiling 和 CPU tiling 技术详解

目录 一、CUDA Tiling 和 CPU Tiling 技术概述 &#xff08;一&#xff09;技术原理 &#xff08;二&#xff09;应用场景 &#xff08;三&#xff09;优势和劣势 二、Tiling 技术在深度学习中的应用 三、Tiling 技术的缺点 一、CUDA Tiling 和 CPU Tiling 技术概述 Til…

介绍五款广受好评的企业级加密软件

在当今信息化时代&#xff0c;数据安全已成为企业管理的重要环节。随着网络攻击和数据泄露事件的频繁发生&#xff0c;如何有效保护企业数据不被泄露&#xff0c;成为各大企业关注的焦点。加密软件作为一种有效的防护工具&#xff0c;通过对数据进行加密处理&#xff0c;确保敏…

react中使用Redux管理token以及token持久化

1.安装插件 npm i reduxjs/toolkit react-redux 2.新建状态管理文件 在src下新建store文件夹&#xff0c;store文件夹下新建模块文件夹(modules)和入口文件&#xff08;index.js&#xff09;&#xff0c;modules文件夹下新建setToken.js文件 3.配置setToken.js import { cr…