Leetcode第123场双周赛

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

Leetcode第123场双周赛

本人水平有限,只做前三道
一、三角形类型

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

如果一个三角形的所有边长度相等,那么这个三角形称为 equilateral 。
如果一个三角形恰好有两条边长度相等,那么这个三角形称为 isosceles 。
如果一个三角形三条边的长度互不相同,那么这个三角形称为 scalene 。
如果这个数组无法构成一个三角形,请你返回字符串 “none” ,否则返回一个字符串表示这个三角形的类型。

示例 1:

输入:nums = [3,3,3]
输出:“equilateral”
解释:由于三条边长度相等,所以可以构成一个等边三角形,返回 “equilateral” 。
示例 2:

输入:nums = [3,4,5]
输出:“scalene”
解释:
nums[0] + nums[1] = 3 + 4 = 7 ,大于 nums[2] = 5 。
nums[0] + nums[2] = 3 + 5 = 8 ,大于 nums[1] = 4 。
nums[1] + nums[2] = 4 + 5 = 9 ,大于 nums[0] = 3 。
由于任意两边纸盒都大于第三边,所以可以构成一个三角形。
因为三条边的长度互不相等,所以返回 “scalene” 。

解题思路

经典的条件逻辑题
先将数组排序能够简化条件逻辑

代码
class Solution {public String triangleType(int[] nums) {Arrays.sort(nums);int a = nums[0];int b = nums[1];int c = nums[2];if(a==c){return "equilateral";}if(a+b>c){if(a==b||b==c){return "isosceles";}return "scalene";}return "none";}
}
二、最大好子数组和
题目

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

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

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

示例 1:

输入:nums = [1,2,3,4,5,6], k = 1
输出:11
解释:好子数组中第一个元素和最后一个元素的差的绝对值必须为 1 。好子数组有 [1,2] ,[2,3] ,[3,4] ,[4,5] 和 [5,6] 。最大子数组和为 11 ,对应的子数组为 [5,6] 。
示例 2:

输入:nums = [-1,3,2,4,5], k = 3
输出:11
解释:好子数组中第一个元素和最后一个元素的差的绝对值必须为 3 。好子数组有 [-1,3,2] 和 [2,4,5] 。最大子数组和为 11 ,对应的子数组为 [2,4,5] 。
示例 3:

输入:nums = [-1,-2,-3,-4], k = 2
输出:-6
解释:好子数组中第一个元素和最后一个元素的差的绝对值必须为 2 。好子数组有 [-1,-2,-3] 和 [-2,-3,-4] 。最大子数组和为 -6 ,对应的子数组为 [-1,-2,-3] 。

解题思路

前缀和+哈希表
如果不使用前缀和数组而构建求区间和的函数,很容易导致超时。
哈希表是为了记录数组值和其下标,便于找到与数组值的差的绝对值为k的下标。同时如果在数组中出现重复数字,则需要考虑更新数组

代码
class Solution {public 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;// 记录nums[i] : iMap<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(pre[i+1]-pre[idx],ans);}if(index.containsKey(last2)){int idx = index.get(last2);ans = Math.max(pre[i+1]-pre[idx],ans);}// 如果nums[i]在之前出现过,那么用贪心的想法来更新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;}
}
三、人员站位的方案数I

给你一个 n x 2 的二维数组 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) ,小羊肖恩的位置不是在围栏的右下角。

示例 1:

输入:points = [[1,1],[2,2],[3,3]]
输出:0
解释:没有办法可以让 liupengsay 的围栏以 liupengsay 的位置为左上角且小羊肖恩的位置为右下角。所以我们返回 0 。
示例 2:

输入:points = [[6,2],[4,4],[2,6]]
输出:2
解释:总共有 2 种方案安排 liupengsay 和小羊肖恩的位置,使得 liupengsay 不会难过:

  • liupengsay 站在 (4, 4) ,小羊肖恩站在 (6, 2) 。
  • liupengsay 站在 (2, 6) ,小羊肖恩站在 (4, 4) 。
    不能安排 liupengsay 站在 (2, 6) 且小羊肖恩站在 (6, 2) ,因为站在 (4, 4) 的人处于围栏内。
    示例 3:

输入:points = [[3,1],[1,3],[1,1]]
输出:2
解释:总共有 2 种方案安排 liupengsay 和小羊肖恩的位置,使得 liupengsay 不会难过:

  • liupengsay 站在 (1, 1) ,小羊肖恩站在 (3, 1) 。
  • liupengsay 站在 (1, 3) ,小羊肖恩站在 (1, 1) 。
    不能安排 liupengsay 站在 (1, 3) 且小羊肖恩站在 (3, 1) ,因为站在 (1, 1) 的人处于围栏内。
    注意围栏是可以不包含任何面积的,上图中第一和第二个围栏都是合法的。
解题思路

这个题目要求我们计算在给定的点集中,有多少种方式可以选择两个点作为矩形的左上角和右下角,满足以下条件:

  1. 矩形的左上角和右下角分别是两个特定的人,我们可以称之为A和B。
  2. A必须位于矩形的左上角,B必须位于矩形的右下角。
  3. 矩形的内部和边缘不能有任何其他点。

为了解决这个问题,我们需要遍历每一对点对,并判断一个点是否在另一个点的左上角,并且这两个点形成的矩形(包括边界)是否存在其他点?

  1. 对所有点按照x坐标进行排序,如果x坐标相同,则按照y坐标排序。这样可以确保我们在遍历点对时,总是从左向右,从上到下进行。
  2. 实际的点对并不是所有点的排布都遵循从左上到右下的规律,在循环内还要对点的纵坐标进行一次判断后才能计数。
代码
class Solution {public int numberOfPairs(int[][] points) {int pairs = 0;Arrays.sort(points,(a,b) -> {if(a[0] != b[0]){return a[0]-b[0];} else{return b[1]-a[1];}});int n = points.length;for (int i = 0; i < n; i++) {for (int j = i+1; j < n; j++) {if(points[i][1] >= points[j][1] && isGood(points, i, j)){pairs++;}}}return pairs;}public boolean isGood(int[][] points,int index1,int index2){int n = points.length;for (int i = 0; i < n; i++) {if(i==index1||i==index2){continue;}if(points[i][0]>=points[index1][0] && points[i][0]<=points[index2][0] && points[i][1] <= points[index1][1] && points[i][1] >= points[index2][1]){return false;}}return true;}
}

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

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

相关文章

大学生创新实践:班级管理系统全解析

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

Redis(十三)缓存双写一致性策略

文章目录 概述示例 缓存双写一致性缓存按照操作来分&#xff0c;细分2种读写缓存&#xff1a;同步直写策略读写缓存&#xff1a;异步缓写策略双检加锁策略 数据库和缓存一致性更新策略先更新数据库&#xff0c;再更新缓存先更新缓存&#xff0c;再更新数据库先删除缓存&#xf…

不懂快团团大团长对接?凭什么快团团的钱轮到你赚?

对接头部快团团大团长&#xff0c;让快团团大团长帮你卖货 分享几个推品的关键词&#xff1a; 1.推品的内容&#xff1a;产品实拍图核心卖点 不要上来就发笔记&#xff0c;你的产品图和文案还没吸引人&#xff0c;就发笔记没有人看。 可以先发你产品的简短卖点和图片&#xff…

ionic报错:Cannot read properties of undefined (reading ‘classList‘)

报错信息&#xff1a; [ionic/vue Warning]: The view you are trying to render for path /tabs/tab1 does not have the required <ion-page> component. Transitions and lifecycle methods may not work as expected.See https://ionicframework.com/docs/vue/navig…

#Z1656. 树上觅食

Description 小J是一只猴子&#xff0c;住在树上&#xff0c;树上每个点都有一些果子 小J每天要固定吃掉S个果子 小J还要多在树上运动一下&#xff0c;于是他想知道这个树上有多少路径&#xff0c;路径上点的果子的总和正好为S 并且路径上的点的深度是连续增加的 Format …

Go语言每日一练链表篇(一)

题目传送门 牛客面试必刷101题 ----------反转链表 题目以及答案源码 反转链表 题目 解题方法 递归函数遍历链表并反转 package main import _"fmt" import . "nc_tools" /** type ListNode struct{* Val int* Next *ListNode* }*//*** 代码中的…

【数据结构笔记】线性表(代码)

文章目录 顺序表基本操作InitList(&L)静态分配动态分配cc 基本操作实现 顺序表 基本操作 InitList(&L) Length(L); LocateElem(L, e); GetElem(L, i); ListInsert(&L, i, e); ListDelete(&L, i, &e); PrintList(L); Empty(L); DestroyList(&L);InitL…

学习总结14

# 【CSGRound1】天下第一 ## 题目背景 天下第一的 cbw 以主席的身份在 8102 年统治全宇宙后&#xff0c;开始了自己休闲的生活&#xff0c;并邀请自己的好友每天都来和他做游戏。由于 cbw 想要显出自己平易近人&#xff0c;所以 zhouwc 虽然是一个蒟蒻&#xff0c;也有能和 c…

Docker- chapter 1

note 1: docker 利用 volume 进行 presist data。 eg : compose.yaml&#xff1a; volumes:database: //# named db by self list golbal volumes&#xff1a; docker volume ls # the volumes on the disk inpect someone volume&#xff1a; docker volume inspect m…

关于harbor做HA

我起初是用helm在k8s上装的harbor&#xff0c;最近遇到如下故障&#xff1a;就是服务器硬件设备故障突然死机&#xff0c;恰巧是harbor容器所在的服务器&#xff0c;其他在这个服务器上运行的容器&#xff0c;由kubelet调度到其他正常的服务器上重启去了&#xff0c;但harbkor并…

@ 代码随想录算法训练营第6周(C语言)|Day39(动态规划)

代码随想录算法训练营第6周&#xff08;C语言&#xff09;|Day39&#xff08;动态规划&#xff09; Day39、动态规划&#xff08;包含题目 ● 62.不同路径 ● 63. 不同路径 II &#xff09; 62.不同路径 题目描述 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点…

opencv案例实战:条码区域分割

前言 识别二维码是一个日常生活中常见的应用,而识别之前,需要先分割出条形码的区域来获取条形码。我们可以使用OpenCV便捷的获取条码的区域。 逐步分析 为了了解数据处理的过程,我们逐步分析并显示处理过程 查看图像 在读入时,传入参数cv2.IMREAD_GRAYSCALE可以直接按…

2024年陕西省安全员C证证考试题库及陕西省安全员C证试题解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年陕西省安全员C证证考试题库及陕西省安全员C证试题解析是安全生产模拟考试一点通结合&#xff08;安监局&#xff09;特种作业人员操作证考试大纲和&#xff08;质检局&#xff09;特种设备作业人员上岗证考试大…

【DC-9靶场渗透】

文章目录 前言 一、确定靶机地址 二、信息收集 三、寻找漏洞 四、进一步漏洞挖掘 五、关键文件 六、ssh爆破 七、提权 总结 前言 马上过年了&#xff0c;年前再做一下DC靶场最后一个靶机。 一、确定靶机地址 1、可使用arp-scan命令 靶机地址为&#xff1a;172.16.10…

C语言---------对操作符的进一步认识

操作符中有⼀些操作符和⼆进制有关系&#xff0c;我们先学习了⼀下⼆进制的和进制转换的知识。 1.原码、反码和补码。 有符号整数的三种表⽰⽅法均有符号位和数值位两部分&#xff0c; 2进制序列中&#xff0c;最⾼位的1位是被当做符号位&#xff0c;剩余的都是数值位。 符号…

GDB调试命令大全

GDB调试命令大全 启动运行设置/查看断点(breakpoint)设置/查看观察点(watchpoint)设置/查看捕捉点(catchpoint)维护停止点维护条件停止点停止点设置运行命令断点菜单恢复程序运行和单步调试信号产生信号量线程 转载自&#xff1a; https://www.cnblogs.com/gqtcgq/p/7511974.h…

树的三种遍历方式-算法

题目 树的三种遍历方式&#xff0c;前序&#xff0c;中序&#xff0c;后续 解题 通过递归 public static List<Integer> preorderTraversal(TreeNode treeNode) {List<Integer> result new ArrayList<>();if (treeNode null) {return result;}List<…

python coding with ChatGPT 打卡第18天| 二叉树:从中序与后序遍历序列构造二叉树、最大二叉树

相关推荐 python coding with ChatGPT 打卡第12天| 二叉树&#xff1a;理论基础 python coding with ChatGPT 打卡第13天| 二叉树的深度优先遍历 python coding with ChatGPT 打卡第14天| 二叉树的广度优先遍历 python coding with ChatGPT 打卡第15天| 二叉树&#xff1a;翻转…

【Spring基础】从0开始学习Spring(2)

前言 在上篇文章&#xff0c;我已经讲了Spring中最核心的知识点&#xff1a;IoC&#xff08;控制反转&#xff09;以及DI&#xff08;依赖注入&#xff09;。这篇文章&#xff0c;我将讲一下关于Spring框架中的其它比较琐碎但是又还是挺重要的知识点&#xff0c;因此&#xff…

【Android-Compose】手势检测实现按下、单击、双击、长按事件,以及避免频繁单击事件的简单方法

目录&#xff1a; 1 不需要双击事件 规避频繁单击事件2 需要双击事件&#xff08;常规写法&#xff09;3 后记&#xff1a;不建议使用上面的代码自定义按钮 1 不需要双击事件 规避频繁单击事件 var firstClickTime by remember { mutableStateOf(System.currentTimeMillis()…