算法提升——LeetCode123场双周赛总结

周赛题目

三角形类型 II

给你一个下标从0开始长度为3的整数数组nums,需要用它们来构造三角形。

如果一个三角形的所有边长度相等,那么这个三角形称为equilateral。

如果一个三角形恰好有两条边长度相等,那么这个三角形称为isosceles。

如果一个三角形三条边的长度互不相同,那么这个三角形称为scalene。

如果这个数组无法构成一个三角形,请你返回字符串"none",否则返回一个字符串表示这个三角形的类型。

解题思路

本题是一道简单题,只要是连接构成三角形的要素是任意两边之和大于第三边即可。

class Solution {public String triangleType(int[] nums) {int a=nums[0];int b=nums[1];int c=nums[2];if (a+b<=c||a+c<=b||b+c<=a){return "none";}if (a==b&&b==c){return "equilateral";}if (a==b||b==c||a==c){return "isosceles";}return "scalene";}
}

人员站位的方案数 I

给你一个nx2的二维数组points,它表示二维平面上的一些点坐标,其中points[i]=[xi,yi]。

我们定义x轴的正方向为右(x轴递增的方向),x轴的负方向为左(x轴递减的方向)。类似的,我们定义y轴的正方向为上(y轴递增的方向),y轴的负方向为下(y轴递减的方向)。

你需要安排这n个人的站位,这n个人中包括liupengsay和小羊肖恩。你需要确保每个点处恰好有一个人。同时,liupengsay想跟小羊肖恩单独玩耍,所以liupengsay会以liupengsay的坐标为左上角,小羊肖恩的坐标为右下角建立一个矩形的围栏(注意,围栏可能不包含任何区域,也就是说围栏可能是一条线段)。如果围栏的内部或者边缘上有任何其他人,liupengsay都会难过。

请你在确保liupengsay不会难过的前提下,返回liupengsay和小羊肖恩可以选择的点对数目。

注意,liupengsay建立的围栏必须确保liupengsay的位置是矩形的左上角,小羊肖恩的位置是矩形的右下角。比方说,以(1,1),(1,3),(3,1)和(3,3)为矩形的四个角,给定下图的两个输入,liupengsay都不能建立围栏,原因如下:

图一中,liupengsay在(3,3)且小羊肖恩在(1,1),liupengsay的位置不是左上角且小羊肖恩的位置不是右下角。
图二中,liupengsay在(1,3)且小羊肖恩在(1,1),小羊肖恩的位置不是在围栏的右下角。
在这里插入图片描述

解题思路

先排序,按横坐标从小到大排序,横坐标相同时,按纵坐标从大到小排序。

这样在枚举points[i]和points[j]时(i<j),就只需要关心纵坐标的大小。

固定points[i[,然后枚举points[j],如果points[j][1]比之前枚举的纵坐标都打,那么矩形中没有其他的点,答案加一。否则不满足。

class Solution {public int numberOfPairs(int[][] points) {Arrays.sort(points, (p, q) -> p[0] != q[0] ? p[0] - q[0] : q[1] - p[1]);int ans = 0;for (int i = 0; i < points.length; i++) {int y0 = points[i][1];int maxY = Integer.MIN_VALUE;for (int j = i + 1; j < points.length; j++) {int y = points[j][1];if (y <= y0 && y > maxY) {maxY = y;ans++;}}}return ans;}}

最大好子数组和

给你一个长度为n的数组nums和一个正整数k。

如果nums的一个子数组中,第一个元素和最后一个元素差的绝对值恰好为k,我们称这个子数组为好的。换句话说,如果子数组nums[i…j]满足|nums[i]-nums[j]|==k,那么它是一个好子数组。

请你返回nums中好子数组的最大和,如果没有好子数组,返回0。

解题思路

利用前缀和来解决本题。子数组nums[i…j]的元素和为sum[j+1]-sum[i]

枚举j,找到最小的s[i],满足nums[i]-nums[j]==k。

class Solution {public static long maximumSubarraySum(int[] nums, int k) {int n = nums.length;long[] pre = new long[n + 1];for (int i = 0; i < n; i++) {pre[i + 1] = pre[i] + nums[i];}long ans = Long.MIN_VALUE;Map<Integer, Integer> index = new HashMap<>();for (int i = 0; i < n; i++) {int x = nums[i];int last1 = k + x;int last2 = x - k;if (index.containsKey(last1)) {int idx = index.get(last1);ans = Math.max(ans, pre[i+1] - pre[idx]);}if (index.containsKey(last2)) {int idx = index.get(last2);ans = Math.max(ans, pre[i+1] - pre[idx]);}if (index.containsKey(x)) {int idx = index.get(x);long seg = pre[i] - pre[idx];if (seg <= 0) {index.put(x, i);}} else {index.put(x, i); }}return ans == Long.MIN_VALUE ? 0 : ans;}
}

人员站位的方案数 II

给你一个nx2的二维数组points,它表示二维平面上的一些点坐标,其中points[i]=[xi,yi]。

我们定义x轴的正方向为右(x轴递增的方向),x轴的负方向为左(x轴递减的方向)。类似的,我们定义y轴的正方向为上(y轴递增的方向),y轴的负方向为下(y轴递减的方向)。

你需要安排这n个人的站位,这n个人中包括liupengsay和小羊肖恩。你需要确保每个点处恰好有一个人。同时,liupengsay想跟小羊肖恩单独玩耍,所以liupengsay会以liupengsay的坐标为左上角,小羊肖恩的坐标为右下角建立一个矩形的围栏(注意,围栏可能不包含任何区域,也就是说围栏可能是一条线段)。如果围栏的内部或者边缘上有任何其他人,liupengsay都会难过。

请你在确保liupengsay不会难过的前提下,返回liupengsay和小羊肖恩可以选择的点对数目。

注意,liupengsay建立的围栏必须确保liupengsay的位置是矩形的左上角,小羊肖恩的位置是矩形的右下角。比方说,以(1,1),(1,3),(3,1)和(3,3)为矩形的四个角,给定下图的两个输入,liupengsay都不能建立围栏,原因如下:

图一中,liupengsay在(3,3)且小羊肖恩在(1,1),liupengsay的位置不是左上角且小羊肖恩的位置不是右下角。
图二中,liupengsay在(1,3)且小羊肖恩在(1,1),小羊肖恩的位置不是在围栏的右下角。
在这里插入图片描述

解题思路

同第二道题。

总结

本次周赛中提到了一个前缀和的解法,后续需要实际在LeetCode中熟悉该算法,并输出一片学习文章。

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

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

相关文章

【考研408】计算机与组成原理笔记

文章目录 [toc] 计算机系统概述计算机系统层次结构计算机硬件的基本组成计算机软件的分类计算机的工作过程计算机系统的多级层次结构课后习题 计算机的性能指标计算机的主要性能指标几个专业术语课后习题 总结 数据的表示和运算数制与编码进位计数制及其相互转换 定点数的表示与…

ctfshow——命令执行

文章目录 web 29——通配符*绕过web30——调用其他命令执行函数web 31——参数逃逸web 32-web 36——配合文件包含伪协议web 37-web 39——文件包含web 40—— web 29——通配符*绕过 i不区分大小写&#xff0c;直接?csystem(tac fl*.php); web30——调用其他命令执行函数 调用…

Linux自有服务—防火墙和计划任务

Linux常用自有服务有NTP时间同步服务、firewalld防火墙服务和crond计划任务服务&#xff0c;NTP在上一篇中讲过&#xff0c;这次主要来说一下防火墙firewalld与计划任务的相关内容。如下。 一、Linux中防火墙firewalld 1、什么是防火墙 防火墙&#xff1a;防范一些网络攻击…

高速接口PCB布局指南(五)高速差分信号布线(三)

高速接口PCB布局指南&#xff08;五&#xff09;高速差分信号布线&#xff08;三&#xff09; 1.表面贴装器件焊盘不连续性缓解2.信号线弯曲3.高速信号建议的 PCB 叠层设计4.ESD/EMI 注意事项5.ESD/EMI 布局规则 tips&#xff1a;资料主要来自网络&#xff0c;仅供学习使用。 …

dolphinscheduler海豚调度(一)简介快速体验

1、简介 Apache DolphinScheduler 是一个分布式易扩展的可视化DAG工作流任务调度开源系统。适用于企业级场景&#xff0c;提供了一个可视化操作任务、工作流和全生命周期数据处理过程的解决方案。 Apache DolphinScheduler 旨在解决复杂的大数据任务依赖关系&#xff0c;并为应…

手把手教你激活BetterZip for Mac免费下载(附注册码) v5.3.4

软件介绍 BetterZip for Mac是一款广受欢迎的文件解压缩工具&#xff0c;支持Mac以及Windows等多个平台&#xff0c;能够生成被Win和Mac支持的压缩包&#xff0c;让用户可以在Mac和Windows电脑之间使用一种通用压缩包&#xff0c;用户可以更快捷地向压缩文件中添加和删除文件&…

相机图像质量研究(9)常见问题总结:光学结构对成像的影响--工厂镜头组装

系列文章目录 相机图像质量研究(1)Camera成像流程介绍 相机图像质量研究(2)ISP专用平台调优介绍 相机图像质量研究(3)图像质量测试介绍 相机图像质量研究(4)常见问题总结&#xff1a;光学结构对成像的影响--焦距 相机图像质量研究(5)常见问题总结&#xff1a;光学结构对成…

Linux(三)--文件系统

Linux命令简介 [rootlocalhost ~]# 表示 Linux 系统的命令提示符。 []&#xff1a;这是提示符的分隔符号&#xff0c;没有特殊含义。 root&#xff1a;显示的是当前的登录用户&#xff0c;笔者现在使用的是 root 用户登录。 &#xff1a;分隔符号&#xff0c;没有特殊含义。 l…

c++阶梯之类与对象(中)< 续集 >

前文&#xff1a; c阶梯之类与对象&#xff08;上&#xff09;-CSDN博客 c阶梯之类与对象&#xff08;中&#xff09;-CSDN博客 前言&#xff1a; 在上文中&#xff0c;我们学习了类的六个默认成员函数之构造&#xff0c;析构与拷贝构造函数&#xff0c;接下来我们来看看剩下…

hbuiderX打包为apk后无法停止录音的解决方案

同一个APP在hbuilder和hbuilderX打包&#xff0c;出现没有麦克风权限 - DCloud问答 第一步&#xff1a; 在manifest.json的“模块权限配置”中勾选以下权限&#xff1a; <uses-permission android:name"android.permission.MODIFY_AUDIO_SETTINGS" /> <use…

【OpenVINO™】在 MacOS 上使用 OpenVINO™ C# API 部署 Yolov5 (下篇)

在 MacOS 上使用 OpenVINO™ C# API 部署 Yolov5 &#xff08;下篇&#xff09; 项目介绍 YOLOv5 是革命性的 "单阶段"对象检测模型的第五次迭代&#xff0c;旨在实时提供高速、高精度的结果&#xff0c;是世界上最受欢迎的视觉人工智能模型&#xff0c;代表了Ult…

前端异步相关知识总结

目录 一、同步和异步简介 同步&#xff08;按顺序执行&#xff09; 异步&#xff08;不按顺序执行&#xff09; 异步出现的原因和需求 二、实现异步的方法 回调函数 Promise 生成器Generators/ yield async await 三、promise和 async await 区别 概念 两者的区别 …

政安晨:示例演绎TensorFlow的官方指南(一){基础知识}

为什么要示例演绎&#xff1f; 既然有了官方指南&#xff0c;咱们在官方指南上看看就可以了&#xff0c;为什么还要写示例演绎的文章呢&#xff1f; 其实对于初步了解TensorFlow的小伙伴们而言&#xff0c;示例演绎才是最重要的。 官方文档已经假定了您已经具备了相当合适的…

政安晨:机器学习快速入门(四){pandas与scikit-learn} {随机森林}

咱们将在这篇文章中使用更复杂的机器学习算法。 随机森林 基本定义 随机森林(Random Forest)是一种机器学习算法&#xff0c;属于集成学习(ensemble learning)的一种。它是通过构建多个决策树&#xff08;即森林&#xff09;来进行预测和分类的。 随机森林的主要特点是采用了…

HTTP2: springboot启用http2

springboot http2应用条件 使用servlet 4.0jdk 9tomcat 9 springboot 开启h2 创建证书 创建脚本&#xff1a; keytool -genkey -keyalg RSA -alias wisely -keystore keystore.jks -storepass pass1234 -validity 4000 -keysize 2048添加springboot配置 server:port: 808…

react+antd+CheckableTag实现Tag标签单选或多选功能

1、效果如下图 实现tag标签单选或多选功能 2、环境准备 1、react18 2、antd 4 3、功能实现 原理: 封装一个受控组件&#xff0c;接受父组件的参数&#xff0c;数据发现变化后&#xff0c;回传给父组件 1、首先&#xff0c;引入CheckableTag组件和useEffect, useMemo, use…

springboot Feign方式注入注解详解

一、FeignClient注解详解 FeignClient是Spring Cloud中用于声明Feign客户端的注解&#xff0c;它使得编写HTTP客户端变得更简单。通过Feign的自动化配置机制&#xff0c;可以很容易地编写HTTP API客户端。以下是FeignClient的详解&#xff1a; 作用&#xff1a;FeignClient注解…

代码随想录算法训练营DAY15 | 二叉树 (2)

一、LeetCode 102 二叉树的层序遍历 题目链接&#xff1a; 102.二叉树的层序遍历https://leetcode.cn/problems/binary-tree-level-order-traversal/ 思路&#xff1a;利用队列的先进先出特性&#xff0c;在处理本层节点的同时将下层节点入队&#xff0c;每次处理一层的节点&…

【力扣】盛最多水的容器,双指针法

盛最多水的容器原题地址 方法一&#xff1a;双指针 如果使用暴力枚举&#xff0c;时间复杂度为&#xff0c;效率太低&#xff0c;会超时。 考虑使用双指针&#xff0c;利用单调性求解。用left和right作为数组height的下标&#xff0c;分别初始化为0和size-1。考虑在区间[lef…

CTF-PWN-堆-【chunk extend/overlapping-2】(hack.lu ctf 2015 bookstore)

文章目录 hack.lu ctf 2015 bookstore检查IDA源码main函数edit_notedelete_notesubmit .fini_array段劫持(回到main函数的方法) 思路格式化字符串是啥呢0x开头或者没有0x开头的十六进制的字符串或字节的转换为整数构造格式化字符串的其他方法 exp 佛系getshell 常规getshell ha…