【LeetCode】挑战100天 Day13(热题+面试经典150题)

【LeetCode】挑战100天 Day13(热题+面试经典150题)

  • 一、LeetCode介绍
  • 二、LeetCode 热题 HOT 100-15
    • 2.1 题目
    • 2.2 题解
  • 三、面试经典 150 题-15
    • 3.1 题目
    • 3.2 题解

一、LeetCode介绍

在这里插入图片描述
LeetCode是一个在线编程网站,提供各种算法和数据结构的题目,面向程序员、计算机科学专业学生和技术爱好者等人群,旨在帮助他们提高算法和编程技能。LeetCode上的问题通常来自各种技术公司的面试题目,因此它也是程序员面试准备的重要资源之一。

LeetCode上的问题涵盖了各种难度级别,从入门级到专家级都有不同难度的题目可供练习。用户可以选择使用不同的编程语言提交答案,LeetCode能够对结果进行评估并返回测试结果。

除了题目外,LeetCode还提供了讨论区、排行榜等社区功能,用户可以在这里交流学习心得、解决疑难问题,并与其他用户比较自己的做题成绩。

挑战100天 AI In LeetCode是基于LeetCode题库,借助AI的能力进行解题、并学习其解题过程。

二、LeetCode 热题 HOT 100-15

2.1 题目

三数之和

给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != j、i != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请你返回所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。示例 1:输入:nums = [-1,0,1,2,-1,-4]
输出:[[-1,-1,2],[-1,0,1]]
解释:
nums[0] + nums[1] + nums[2] = (-1) + 0 + 1 = 0 。
nums[1] + nums[2] + nums[4] = 0 + 1 + (-1) = 0 。
nums[0] + nums[3] + nums[4] = (-1) + 2 + (-1) = 0 。
不同的三元组是 [-1,0,1][-1,-1,2] 。
注意,输出的顺序和三元组的顺序并不重要。
示例 2:输入:nums = [0,1,1]
输出:[]
解释:唯一可能的三元组和不为 0 。
示例 3:输入:nums = [0,0,0]
输出:[[0,0,0]]
解释:唯一可能的三元组和为 0 。提示:3 <= nums.length <= 3000
-105 <= nums[i] <= 10^5

2.2 题解

解题思路:

可以使用双指针的方法来解决。首先对数组进行排序,然后固定一个数,再使用双指针在剩余的区间内查找满足条件的两个数。

具体步骤如下:

  1. 对数组 nums 进行排序。
  2. 遍历排序后的数组 nums,固定第一个数 nums[i],将问题转化为在剩余的区间 [i+1, nums.length-1] 中寻找两个数,使得它们的和等于 -nums[i]。
  3. 使用双指针 left 和 right 分别指向区间的两端,计算当前的和 sum = nums[i] + nums[left] + nums[right]。
    • 如果 sum 等于 0,则将 [nums[i], nums[left], nums[right]] 添加到结果列表中,并同时将 left 和 right 分别向右和向左移动,跳过重复的元素。
    • 如果 sum 小于 0,则将 left 向右移动一位,增大 sum。
    • 如果 sum 大于 0,则将 right 向左移动一位,减小 sum。
  4. 重复步骤 2 和步骤 3,直到 left 和 right 相遇或者超出边界。
class Solution {public List<List<Integer>> threeSum(int[] nums) {List<List<Integer>> result = new ArrayList<>();int n = nums.length;if (n < 3) {return result;}Arrays.sort(nums);for (int i = 0; i < n - 2; i++) {if (nums[i] > 0) {break;}if (i > 0 && nums[i] == nums[i - 1]) {continue;}int target = -nums[i];int left = i + 1;int right = n - 1;while (left < right) {int sum = nums[left] + nums[right];if (sum == target) {result.add(Arrays.asList(nums[i], nums[left], nums[right]));while (left < right && nums[left] == nums[left + 1]) {left++;}while (left < right && nums[right] == nums[right - 1]) {right--;}left++;right--;} else if (sum < target) {left++;} else {right--;}}}return result;}
}

在这里插入图片描述

三、面试经典 150 题-15

数组 / 字符串

3.1 题目

分发糖果

n 个孩子站成一排。给你一个整数数组 ratings 表示每个孩子的评分。你需要按照以下要求,给这些孩子分发糖果:每个孩子至少分配到 1 个糖果。
相邻两个孩子评分更高的孩子会获得更多的糖果。
请你给每个孩子分发糖果,计算并返回需要准备的 最少糖果数目 。示例 1:输入:ratings = [1,0,2]
输出:5
解释:你可以分别给第一个、第二个、第三个孩子分发 212 颗糖果。
示例 2:输入:ratings = [1,2,2]
输出:4
解释:你可以分别给第一个、第二个、第三个孩子分发 121 颗糖果。第三个孩子只得到 1 颗糖果,这满足题面中的两个条件。提示:n == ratings.length
1 <= n <= 2 * 104
0 <= ratings[i] <= 2 * 10^4

3.2 题解

解题思路:

可以使用贪心算法来解决,分别从左往右和从右往左遍历一遍,计算每个孩子能够获得的最小糖果数量。

具体做法如下:

  1. 初始化一个长度为 n 的糖果数组 candy,每个元素初始化为 1。
  2. 第一遍遍历:从左往右遍历一遍,如果右边的孩子评分比左边的高,那么右边的孩子应该比左边的孩子获得更多的糖果,因此将右边孩子的糖果数量更新为左边孩子的糖果数量加 1。
  3. 第二遍遍历:从右往左遍历一遍,如果左边的孩子评分比右边的高,并且左边孩子当前的糖果数量不大于右边孩子的糖果数量,那么左边的孩子应该比右边的孩子获得更多的糖果,因此将左边孩子的糖果数量更新为右边孩子的糖果数量加 1。
  4. 计算糖果总数:将每个孩子获得的糖果数量累加即可。
class Solution {public int candy(int[] ratings) {int n = ratings.length;int[] candy = new int[n];Arrays.fill(candy, 1);for (int i = 1; i < n; i++) {if (ratings[i] > ratings[i - 1]) {candy[i] = candy[i - 1] + 1;}}for (int i = n - 2; i >= 0; i--) {if (ratings[i] > ratings[i + 1] && candy[i] <= candy[i + 1]) {candy[i] = candy[i + 1] + 1;}}int sum = 0;for (int i = 0; i < n; i++) {sum += candy[i];}return sum;}
}

在这里插入图片描述

至此,挑战100天 AI In LeetCode Day13(热题+面试经典150题)完成,后续会持续调整;查阅过程中若遇到问题欢迎留言或私信交流。

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

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

相关文章

Vue3 实现elementPlus的table列宽调整和拖拽

1、需要的包 // 除了Vue和element-plus外还需要以下的包 npm install sortablejs2、具体代码如下&#xff0c;可直接粘贴运行 <template><div class"draggable-table"><el-table ref"tableRef":data"tableData.data":key"…

Java-飞翔的小鸟

前言 基于Java的飞翔小鸟游戏&#xff0c;本代码来自b站up主分享。本游戏所需的图片素材需要自己获取并下载&#xff0c;在此视频下&#xff0c;视频链接&#xff1a;【Java经典小游戏项目之飞翔的小鸟】 https://www.bilibili.com/video/BV1ou411o7br/?p10&share_source…

C#编程题分享(4)

换行输出整数问题 输⼊任意⼀个位数未知的整数&#xff0c;输出这个数每⼀位上的数字。输出的时候&#xff0c;从个位开始输出&#xff0c;每输出⼀个数字换⼀⾏。样例输⼊&#xff1a;3547 输出&#xff1a;7 换行输出 4 换行输出5 换行输出3 int n Convert.ToInt32(Conso…

【python基础(九)】文件和异常详解:使用、读取、写入、追加、保存用户的信息,以及优雅的处理异常

文章目录 一. 从文件中读取数据1. 读取整个文件2. 文件路径3. 逐行读取4. 创建一个包含文件各行内容的列表 二. 写入文件1. 写入空文件2. 写入多行3. 附加到文件 三. 异常1. 处理ZeroDivisionError异常2. 使用try-except代码块3. try-except-else ing4. 处理FileNotFoundError异…

如何在AD上创建完整的项目

首先&#xff0c;我们先安装好AD&#xff0c;这里我使用的是AD22&#xff0c;安装过程如下&#xff1a; Altium Designer 22下载安装教程-CSDN博客 Altium Designer 22是全球领先的PCB设计软件之一&#xff0c;为电路板设计师提供了一种集成的解决方案&#xff0c;旨在简化和加…

探讨工业元宇宙和数字孪生的关系

就在各类技术专家还在试图设想元宇宙虚拟世界将为企业和消费者带来什么时&#xff0c;工业元宇宙虚拟世界已经在改变人们设计、制造以及与各行业物理实体互动的方式。尽管元宇宙的定义比比皆是&#xff0c;工业元宇宙将如何发展还有待观察&#xff0c;但数字孪生越来越多地被视…

shell(函数和数组)

目录 一、函数 1.函数的由来 2.函数的作用 3.函数的使用方法 4.函数的定义 5.查看函数 6.删除函数 7.函数返回值 8.函数的传参数 9.函数递归 二、数组 1.数组的相关介绍 2.声明数组 3.定义数组的格式 4.冒泡排序 总结&#xff1a;本章主要介绍了函数和数组相关知…

运维 在Windows上搭建小型Git服务

文章目录 1、Git选型1.1、主要特性1.2、代码管理1.3、工单管理1.4、Pull/Merge requests1.5、第三方集成1.6、选型结论 2、环境搭建2.1、Gitea下载2.2、Gitea安装2.3、配置服务信息2.4、运行服务2.5、注册Gitea为服务2.6、正常使用 1、Git选型 1.1、主要特性 1.2、代码管理 1.…

多数据库使用django-apscheduler时,migrate后并不能生成django_apscheduler_djangojob表的问题

先说一下django-apscheduler定时器的使用过程&#xff1a; django-apscheduler基本使用 1.安装django-apscheduler代码如下&#xff08;示例&#xff09;&#xff1a; pip install django-apscheduler 2.配置settings.py的INSTALLED_APPS代码如下&#xff08;示例&#xff09…

项目中常用的 19 条 SQL 优化宝典

一、EXPLAIN 做MySQL优化,我们要善用 EXPLAIN 查看SQL执行计划。 下面来个简单的示例,标注(1,2,3,4,5)我们要重点关注的数据 type列,连接类型。一个好的sql语句至少要达到range级别。杜绝出现all级别 key列,使用到的索引名。如果没有选择索引,值是NULL。可以采取强制索引…

【CCF-PTA】第03届Scratch第01题 -- 梦醒时分

梦醒时分 【题目描述】 睡眠是人体正常的生理需要&#xff0c;同年龄男女睡眠时间无明显差别&#xff0c;一般是8小时左右。居家的小明作息生活很规律&#xff0c;晚上11点睡觉&#xff0c;早晨7点起床学习。请你编写程序来判断&#xff0c;每周&#xff08;共168小时&#x…

【JavaEE初阶】 JavaScript相应的WebAPI

文章目录 &#x1f332;WebAPI 背景知识&#x1f6a9;什么是 WebAPI&#x1f6a9;什么是 API &#x1f38d;DOM 基本概念&#x1f6a9;什么是 DOM&#x1f6a9;DOM 树 &#x1f340;获取元素&#x1f6a9;querySelector&#x1f6a9;querySelectorAll &#x1f384;事件初识&am…

不是吧?线程池这样搞?

其他系列文章目录 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 系列文章目录 前言 一、为什么需要线程池&#xff1f; 二、举个背景例子 三、怎么创建线程池&#xff1f; 四、线程池指定线程数 前言 学习线程池能够帮助我们更好地处理多线程编程&#xff0c;并提高程…

TikTok美区本土店铺如何做好IP隔离?

为什么要进行IP隔离呢&#xff1f;因为我们无法在国内直接运营Shopee、TikTok、Lazada等平台的本土店&#xff0c;平台识别出店铺登录IP非本土IP&#xff0c;则容易导致店铺风控、被标记为伪本土店&#xff0c;影响店铺经营。 TikTok美区店铺的IP隔离方法和Shopee本土店一致&a…

SpringMVC(二)

八、HttpMessageConverter HttpMessageConverter&#xff0c;报文信息转换器&#xff0c;将请求报文转换为Java对象&#xff0c;或将Java对象转换为响应报文 HttpMessageConverter提供了两个注解和两个类型&#xff1a;RequestBody&#xff0c;ResponseBody&#xff0c;Reque…

【MySQL】子查询

文章目录 子查询IN运算符子查询 VS 连接ALL关键字ANY关键字相关子查询 !EXISTS运算符select子句中的子查询from子句中的子查询 子查询 获取价格大于id为3的货物的商品 用到了内查询&#xff0c;获取id为3的商品的单价&#xff0c;把结构传给外查询 在where子句中编写子查询&am…

【python基础(四)】if语句详解

文章目录 一. 一个简单示例二. 条件测试1. 检查多个条件1.1. 使用and关联多个条件1.2. 使用or检查多个条件1.3. in的判断 2. 布尔表达式 三. if语句1. 简单的if语句2. if-else语句3. if-elif-else结构4. 使用多个elif代码块5. 省略else代码块 四. 使用if语句处理列表1. 检查特殊…

2023-11-23 LeetCode每日一题(HTML 实体解析器)

2023-11-23每日一题 一、题目编号 1410. HTML 实体解析器二、题目链接 点击跳转到题目位置 三、题目描述 「HTML 实体解析器」 是一种特殊的解析器&#xff0c;它将 HTML 代码作为输入&#xff0c;并用字符本身替换掉所有这些特殊的字符实体。 HTML 里这些特殊字符和它们…

Endnote软件添加期刊引用格式

在下述网址中&#xff0c;找到你想要添加的期刊&#xff0c;下载引用格式文件&#xff08;后缀为.ens格式&#xff09; https://endnote.com/downloads/styles/?wpv_post_searchInformationfusion&wpv_aux_current_post_id12829&wpv_view_count12764-TCPID12829 下载…

SQLY优化

insert优化 1.批量插入 手动事务提交 主键顺序插入&#xff0c;主键顺序插入性能高于乱序插入 2.大批量插入数据 如果一次性需要插入大批量数据&#xff0c;使用Insert语句插入性能较低&#xff0c;此时可以使用MYSQL数据库提供的load指令进行插入 主键优化 主键设计原则 …