算法提升——LeetCode第 386 场周赛总结

题目

分割数据

给你一个长度为偶数的整数数组nums。你需要将这个数组分割成nums1和nums2两部分,要求:

nums1.lengthnums2.lengthnums.length/2。
nums1应包含互不相同的元素。
nums2也应包含互不相同的元素。
如果能够分割数组就返回true,否则返回false。

解题思路

map计数,如果数字出现次数超过2次,则无法按题意分割。

class Solution {public boolean isPossibleToSplit(int[] nums) {Map<Integer,Integer>map=new HashMap<>();for(int num:nums){int count=map.getOrDefault(num,0);if (count>=2){return false;}map.put(num,count+1);}return true;}
}

求交集区域内的最大正方形面积

在二维平面上存在n个矩形。给你两个下标从0开始的二维整数数组bottomLeft和topRight,两个数组的大小都是nx2,其中bottomLeft[i]和topRight[i]分别代表第i个矩形的左下角和右上角坐标。

我们定义向右的方向为x轴正半轴(x坐标增加),向左的方向为x轴负半轴(x坐标减少)。同样地,定义向上的方向为y轴正半轴(y坐标增加),向下的方向为y轴负半轴(y坐标减少)。

你可以选择一个区域,该区域由两个矩形的交集形成。你需要找出能够放入该区域内的最大正方形面积,并选择最优解。

返回能够放入交集区域的正方形的最大可能面积,如果矩形之间不存在任何交集区域,则返回0。

解题思路

有n个矩形,需要计算由两个矩形的交集形成的区域中可以放入的最大正方形面积。可以遍历每一对矩形计算交集区域内可以放入的最大正方形边长,根据边长的平方计算最大正方形面积,遍历所有矩形对之后即可得到最大正方形面积。

class Solution {public long largestSquareArea(int[][] bottomLeft, int[][] topRight) {long maxSquareArea = 0;int n = bottomLeft.length;for (int i = 0; i < n; i++) {int[] bottomLeft1 = bottomLeft[i];int[] topRight1 = topRight[i];for (int j = i + 1; j < n; j++) {int[] bottomLeft2 = bottomLeft[j];int[] topRight2 = topRight[j];long squareArea = overlapSquareArea(bottomLeft1, topRight1, bottomLeft2, topRight2);maxSquareArea = Math.max(maxSquareArea, squareArea);}}return maxSquareArea;}public long overlapSquareArea(int[] bottomLeft1, int[] topRight1, int[] bottomLeft2, int[] topRight2) {int overlapWidth = Math.max(Math.min(topRight1[0], topRight2[0]) - Math.max(bottomLeft1[0], bottomLeft2[0]), 0);int overlapHeight = Math.max(Math.min(topRight1[1], topRight2[1]) - Math.max(bottomLeft1[1], bottomLeft2[1]), 0);long side = Math.min(overlapWidth, overlapHeight);return side * side;}
}

标记所有下标的最早秒数 I

给你两个下标从1开始的整数数组nums和changeIndices,数组的长度分别为n和m。

一开始,nums中所有下标都是未标记的,你的任务是标记nums中所有下标。

从第1秒到第m秒(包括第m秒),对于每一秒s,你可以执行以下操作之一:

  • 选择范围[1,n]中的一个下标i,并且将nums[i]减少1。
  • 如果nums[changeIndices[s]]等于0,标记下标changeIndices[s]。
  • 什么也不做。
    请你返回范围[1,m]中的一个整数,表示最优操作下,标记nums中所有下标的最早秒数,如果无法标记所有下标,返回-1。

解题思路

二分计算

class Solution {public int earliestSecondToMarkIndices(int[] nums, int[] changeIndices) {int n = nums.length;int m = changeIndices.length;if (n > m) {return -1;}int[] lastT = new int[n];int left = n - 1, right = m + 1;while (left + 1 < right) {int mid = (left + right) / 2;if (check(nums, changeIndices, lastT, mid)) {right = mid;} else {left = mid;}}return right > m ? -1 : right;}private boolean check(int[] nums, int[] changeIndices, int[] lastT, int mx) {Arrays.fill(lastT, -1);for (int t = 0; t < mx; t++) {lastT[changeIndices[t] - 1] = t;}for (int t : lastT) {if (t < 0) { // 有课程没有考试时间return false;}}int cnt = 0;for (int i = 0; i < mx; i++) {int idx = changeIndices[i] - 1;if (i == lastT[idx]) { // 考试if (nums[idx] > cnt) { // 没时间复习return false;}cnt -= nums[idx]; // 复习这门课程} else {cnt++; // 留着后面用}}return true;}
}

标记所有下标的最早秒数 II

给你两个下标从1开始的整数数组nums和changeIndices,数组的长度分别为n和m。

一开始,nums中所有下标都是未标记的,你的任务是标记nums中所有下标。

从第1秒到第m秒(包括第m秒),对于每一秒s,你可以执行以下操作之一:

  • 选择范围[1,n]中的一个下标i,并且将nums[i]减少1。
  • 将nums[changeIndices[s]]设置成任意的非负整数。
    选择范围[1,n]中的一个下标i,满足nums[i]等于0,并标记下标i。
  • 什么也不做。
    请你返回范围[1,m]中的一个整数,表示最优操作下,标记nums中所有下标的最早秒数,如果无法标记所有下标,返回-1。

解题思路

二分加贪心

class Solution {public int earliestSecondToMarkIndices(int[] nums, int[] changeIndices) {int n = nums.length;int m = changeIndices.length;if (n > m) {return -1;}long slow = n; // 慢速复习+考试所需天数for (int v : nums) {slow += v;}int[] firstT = new int[n];Arrays.fill(firstT, -1);for (int t = m - 1; t >= 0; --t) {firstT[changeIndices[t] - 1] = t;}PriorityQueue<int[]> pq = new PriorityQueue<>((a, b) -> a[0] - b[0]);int left = n - 1, right = m + 1;while (left + 1 < right) {pq.clear();int mid = (left + right) / 2;if (check(nums, changeIndices, firstT, pq, slow, mid)) {right = mid;} else {left = mid;}}return right > m ? -1 : right;}private boolean check(int[] nums, int[] changeIndices, int[] firstT, PriorityQueue<int[]> pq, long slow, int mx) {int cnt = 0;for (int t = mx - 1; t >= 0; t--) {int i = changeIndices[t] - 1;int v = nums[i];if (v <= 1 || t != firstT[i]) {cnt++;continue;}if (cnt == 0) {if (pq.isEmpty() || v <= pq.peek()[0]) {cnt += 1; continue;}slow += nums[pq.poll()[1]] + 1;cnt += 2;}slow -= nums[i] + 1;cnt--; pq.offer(new int[]{v, i});}return cnt >= slow; }
}

总结

当前,我的算法能力提升似乎遇到了平台期,解题效率停滞不前。为了突破这一阶段,我计划采取多元化的学习策略,不再拘泥于单一的学习方法或资源。我将拓宽学习渠道,包括研读算法专著、观看教程视频、参与网络课程以及加入研讨会,以此来丰富我的知识体系并提高解题技巧。

来源

LeetCode官网

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

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

相关文章

vue2 项目 vscode 配置

安装node.js 下载https://nodejs.org/zh-cn/download/ 安装到目录D:\nodejs&#xff08;自定义&#xff0c;不能有空格、中文、特殊字符&#xff09;配置环境变量&#xff0c;将安装目录加入Path环境变量配置npm 在安装目录新建 node_cache 和 node_global 两个文件夹&#xff…

Maven入门:Java项目构建和管理的利器

Maven入门&#xff1a;Java项目构建和管理的利器 Maven 是一个项目管理和综合工具&#xff0c;它基于项目对象模型&#xff08;POM&#xff09;概念。Maven 可以管理项目的构建、报告和文档。以下是一篇介绍 Maven 配置和应用的教程文章。 Maven简介 Maven 使用其核心概念 POM…

【Python编程+数据清洗+Pandas库+数据分析】

数据分析的第一步往往是数据清洗&#xff0c;这个过程关键在于理解、整理和清洗原始数据&#xff0c;为进一步分析做好准备。Python 语言通过Pandas库提供了一系列高效的数据清洗工具。接下来&#xff0c;该文章将通过一个简单的案例演示如何利用 Pandas 进行数据清洗&#xff…

【Maven】Maven 基础教程(一):基础介绍、开发环境配置

Maven 基础教程&#xff08;一&#xff09;&#xff1a;基础介绍、开发环境配置 1.Maven 是什么1.1 构建1.2 依赖 2.Maven 开发环境配置2.1 下载安装2.2 指定本地仓库2.3 配置阿里云提供的镜像仓库2.4 配置基础 JDK 版本2.5 配置环境变量 1.Maven 是什么 Maven 是 Apache 软件…

限流器 github的ratelimiter

一、pom依赖 <!--限流器--><dependency><groupId>io.github.resilience4j</groupId><artifactId>resilience4j-ratelimiter</artifactId><version>1.7.0</version></dependency>二、限流器配置 package com.test.confi…

N个数中寻找前K个最大的数

文章目录 一、先把这N个数的前K个建立一个小堆二、再把这K个数与剩下的N-K个数进行比较交换三、最后用向下调整算法就可以得到这N个数中最大的前K个 一、先把这N个数的前K个建立一个小堆 先创建一个文本文件&#xff0c;然后向里面写数据&#xff0c;这里N我设置的是1000 int n…

前端打包工具的发展历程、思路(grunt,gulp,webpack,vite)

现在前端发展真快&#xff0c;需要学的东西太多了&#xff0c;下面总结下前端打包的发展过程&#xff0c;便于区分和选择学习。 什么是前端打包 前端打包是指将多个JavaScript文件、CSS文件、图片等资源进行合并和优化处理,并输出为一个或多个文件的过程。这样做的目的是减少…

连接未来:深入解析Internet Storage Name Service (iSNS)及其在数据存储网络中的革命性作用

1. 引言 首先&#xff0c;我们将介绍iSNS的基本概念、它的作用以及在现代计算机网络中的重要性。iSNS是一种数据存储网络服务&#xff0c;用于简化存储区域网络&#xff08;SAN&#xff09;的发现和管理过程&#xff0c;特别是在使用Internet Small Computer System Interface…

【web APIs】1、(学习笔记)有案例!

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、概念二、使用步骤1.获取DOM对象2.操作元素内容3.属性修改3.1.常用属性修改3.2.控制样式属性3.3.操作类名(className) 操作CSS3.4.操作表单元素属性3.5.自定…

【LeetCode每日一题】938. 二叉搜索树的范围和

2024-2-26 文章目录 [938. 二叉搜索树的范围和](https://leetcode.cn/problems/range-sum-of-bst/)思路&#xff1a;写法一&#xff1a;在中间累加写法二&#xff1a;在最后累加 938. 二叉搜索树的范围和 思路&#xff1a; 1.在二叉搜索树中&#xff1a;左子树的结点都小于根节…

小甲鱼Python06 序列字典集合

一、序列 1.id函数 is运算符 我们首先思考下字符串、元组、列表的共同点&#xff1a; 都有很多共同的运算符。都可以通过索引来获取元素&#xff0c;第一个元素索引都是0&#xff0c;都可以通过切片的方法获取某个范围内元素的集合。 以上三种统称为序列。序列分为可变序列…

抖音视频评论采集软件|抖音数据抓取工具

抖音视频评论采集软件是一款基于C#开发的高效、便捷的工具&#xff0c;旨在为用户提供全面的数据采集和分析服务。该软件不仅支持通过关键词进行搜索抓取&#xff0c;还能够通过分享链接进行单个视频的抓取和下载&#xff0c;让用户轻松获取抖音视频评论数据。 其中&#xff0c…

JSP实现数据传递与保存(一)

一、Web开发步骤 1.1两类模式 后端——————前端 先有前端&#xff0c;前端用的时候直接调用 后端已实现注册接口&#xff0c;接口名为doRegister.jsp 前端此时&#xff1a; 前端的form表单中的action提交地址就只能填doRegister.jsp&#xff0c;即&#xff1a; <f…

10.网络游戏逆向分析与漏洞攻防-游戏网络架构逆向分析-接管游戏发送数据的操作

内容参考于&#xff1a;易道云信息技术研究院VIP课 上一个内容&#xff1a;接管游戏连接服务器的操作 码云地址&#xff08;master 分支&#xff09;&#xff1a;染指/titan 码云版本号&#xff1a;00820853d5492fa7b6e32407d46b5f9c01930ec6 代码下载地址&#xff0c;在 ti…

Doris——荔枝微课统一实时数仓建设实践

目录 一、业务介绍 二、早期架构及痛点 2.1 早期架构 2.2 架构痛点 三、技术选型 四、新的架构及方案 五、搭建经验 5.1 数据建模 5.2 数据开发 5.3 库表设计 5.4 数据管理 5.4.1 监控告警 5.4.2 数据备份与恢复 六、收益总结 七、未来规划 原文大佬这篇Doris腾…

传入一个字符串或标签返回其所占的长度

传入一个字符串或标签返回其所占的长度 思路说明 使用隐藏的div元素来插入传入的HTML或纯字符串&#xff0c;并测量其宽度。使用style"white-space: nowrap;"来确保字符串不换行。使用隐藏的div元素的offsetWidth来取得宽度。取得之后&#xff0c;要记得移除插入的…

适配器模式(Adapter Pattern) C++

上一节&#xff1a;原型模式&#xff08;Prototype Pattern&#xff09; C 文章目录 0.理论1.组件2.类型3.什么时候使用 1.实践1.基础接口和类2.类适配器实现3.对象适配器实现 0.理论 适配器模式&#xff08;Adapter Pattern&#xff09;是一种结构型设计模式&#xff0c;它允…

日更【系统架构设计师知识总结3】存储系统

【原创精华总结】自己一点点手打、总结的脑图&#xff0c;把散落在课本以及老师讲授的知识点合并汇总&#xff0c;反复提炼语言&#xff0c;形成知识框架。希望能给同样在学习的伙伴一点帮助&#xff01;

LeetCode--238

238. 除自身以外数组的乘积 给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&am…

《TCP/IP详解 卷一》第9章 广播和本地组播

目录 9.1 引言 9.2 广播 9.2.1 使用广播地址 9.2.2 发送广播数据报 9.3 组播 9.3.1 将组播IP地址转换为组播MAC地址 9.3.2 例子 9.3.3 发送组播数据报 9.3.4 接收组播数据报 9.3.5 主机地址过滤 9.4 IGMP协议和MLD协议 9.4.1 组成员的IGMP和MLD处理 9.4.2 组播路由…