力扣hot100刷题第一天

哈希

1. 两数之和

题目

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。你可以按任意顺序返回答案。
在这里插入图片描述题意:从给定数组中找到两个数的和为target,返回这两个数的下标
思路:使用哈希表存储数和对应下标,遍历的同时进行寻找

代码

class Solution {
public int[] twoSum(int[] nums, int target) {
int n = nums.length;
Map<Integer,Integer> map = new HashMap<>();
for(int i=0;i<nums.length;i++){
if(map.containsKey(target-nums[i])){
return new int[] {i,map.get(target-nums[i])};
}
map.put(nums[i],i);
}
return null;
}

49.字母异位词分组

题目

给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的所有字母得到的一个新单词。
在这里插入图片描述题意:给定一系列字符串,将组成相同顺序不同的字符串放在一起并返回
思路:构建异位词的key,将相同元素放在哈希表的同一个key下,然后把哈希表的values返回

代码

class Solution {
public List<List> groupAnagrams(String[] strs) {
Map<String, List> map = new HashMap<>();
for (String str : strs) {
int n = str.length();
char[] chars = str.toCharArray();
Arrays.sort(chars);
String key = new String(chars);
List e = map.getOrDefault(key, new ArrayList<>());
e.add(str);
map.put(key, e);
}
return map.values().stream().toList();
}
}

128. 最长连续序列

题目

给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。
请你设计并实现时间复杂度为 O(n) 的算法解决此问题。
在这里插入图片描述题意:给定数组,找出最长连续序列的长度,如5,6,7…
思路:使用set存储所有的数,然后遍历所有的数,每一次循环,检查是否存在比当前数更小的值,如果存在,直接跳过,如果不存在,则开始统计。

代码

class Solution {
public int longestConsecutive(int[] nums) {
if (nums.length == 0) return 0;
Set set = new HashSet<>();
for (int num : nums) {
set.add(num);
}
int longest = 1;
for (Integer num : set) {
if (set.contains(num - 1)) continue;//如果 set 中存在 num - 1,则跳过当前元素(这意味着当前元素不是某个连续序列的起点)。
int curLongest = 1;
while (set.contains(++num)) {
curLongest++;
longest = Math.max(longest, curLongest);
}
}
return longest;
}
}

双指针

283.移动零

题目

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
请注意 ,必须在不复制数组的情况下原地对数组进行操作。
示例 1:
输入: nums = [0,1,0,3,12]
输出: [1,3,12,0,0]
示例 2:
输入: nums = [0]
输出: [0]
题意:将非0的数前移,其他位置置0
思路:双指针,将非0的数移动到前指针位置,结束遍历后全部填充0

代码

方法一
int index = 0;
for(int i = 0;i< nums.length;i++){
if(nums[i] != 0){
nums[index] = nums[i];
index++;
}
}
for(int i = index;i< nums.length;i++){
nums[i] = 0;
}
方法二
class Solution {
public void moveZeroes(int[] nums) {
int i = 0; //下一个非0数存放的位置
int j = 0; //当前检索的位置
while (j < nums.length) {
if (nums[j] != 0) {
nums[i] = nums[j];
i++;
}
j++;
}
while (i < nums.length) {
nums[i] = 0;
i++;
}
}
}

11.盛最多水的容器

题目

给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。
找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
返回容器可以储存的最大水量。
在这里插入图片描述题意:给定数组height,任选两个下标i和j,求(j-i)*min(height[i],height[j])的最大值
思路:双指针,左指针向右检索,右指针向左检索,每次只移动高度较小的那个指针,遍历过程中记录最大面积

代码

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

15.三数之和

题目

给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != j、i != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请你返回所有和为 0 且不重复的三元组。
注意:答案中不可以包含重复的三元组。
在这里插入图片描述题意:给定数组,找出任意三个数,使其和为0,三元组不能重复
思路:先排序,再使用三指针,指针i从前往后遍历,每次循环中使用双指针j和k,若当前之和小于target则右指针前移,否则左指针后移。这里的关键是需要去重。每次结果匹配后需要移动双指针时,先记录当前指针的值,然后一直移动直到数值不相等为止。

代码

class Solution {
public List<List> threeSum(int[] nums) {
List<List> res = new ArrayList<>();
Arrays.sort(nums);
for(int i=0;i<nums.length;i++){
if(nums[i]>0){
return res;
}
if(i>0&&nums[i]==nums[i-1]) continue;
int left =i+1;
int right = nums.length-1;
while(right>left){
int sum = nums[i]+nums[left]+nums[right];
if(sum>0){
right–;
}
else if(sum<0){
left++;
}
else{
res.add(Arrays.asList(nums[i],nums[left],nums[right]));
while(right>left&&nums[right]==nums[right-1]) right–;
while(right>left&&nums[left]==nums[left+1]) left++;

                right--;left++;}}}return res;
}

}

42.接雨水

题目

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。
在这里插入图片描述题意:接雨水,有点抽象
思路:先统计每一个柱子的左边和右边最高柱子的高度,用这两个高度中较低的那个减去当前柱子高度就是当前这个点能够存储的水

代码

class Solution {
public int trap(int[] height) {
int n = height.length;

    if (n == 0) return 0; // 如果数组为空,直接返回0int[] leftMax = new int[n];int[] rightMax = new int[n];// 计算每个位置左边的最大高度leftMax[0] = height[0];for (int i = 1; i < n; i++) {leftMax[i] = Math.max(leftMax[i - 1], height[i]);}// 计算每个位置右边的最大高度rightMax[n - 1] = height[n - 1];for (int i = n - 2; i >= 0; i--) {rightMax[i] = Math.max(rightMax[i + 1], height[i]);}// 计算总的积水量int sum = 0;for (int i = 0; i < n; i++) {int waterLevel = Math.min(leftMax[i], rightMax[i]);if (waterLevel > height[i]) {sum += waterLevel - height[i];}}return sum;
}

}

滑动窗口

3.无重复字符的最长字串

题目

给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串的长度。
在这里插入图片描述题意:找出不含重复字符的连续字串的长度
思路:双指针指向不含重复字符的连续字串的头和尾,用集合存储子串中的元素,有重复时,左指针持续右移,无重复后统计长度

代码

 // 使用 HashSet 存储当前窗口内的字符Set<Character> set = new HashSet<>();// 初始化左右指针和最大长度int left = 0, right = 0;int maxLength = 0;// 遍历字符串while (right < s.length()) {char currentChar = s.charAt(right);// 如果当前字符不在集合中,将其加入集合并扩展窗口if (!set.contains(currentChar)) {set.add(currentChar);right++;maxLength = Math.max(maxLength, right - left); // 更新最大长度} else {// 如果当前字符已经在集合中,收缩窗口set.remove(s.charAt(left));left++;}}return maxLength;

438.找到字符串中所有字母异位词

题目

给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。
在这里插入图片描述
题意:找出所有异位词
思路:维护一个固定长度的窗口,向后遍历,每前进一步就检查当前窗口是否满足条件,满足条件就记录下来

代码

  List<Integer> result = new ArrayList<>();// 如果 s 的长度小于 p 的长度,直接返回空列表if (s.length() < p.length()) {return result;}// 初始化字符频率数组int[] pCount = new int[26]; // 记录 p 中字符的频率int[] sCount = new int[26]; // 记录当前窗口中字符的频率// 填充 pCount 数组for (char c : p.toCharArray()) {pCount[c - 'a']++;}int left = 0, right = 0;int pLength = p.length();while (right < s.length()) {// 将当前字符加入窗口,并更新频率char currentChar = s.charAt(right);sCount[currentChar - 'a']++;// 如果窗口大小等于 p 的长度if (right - left + 1 == pLength) {// 比较两个频率数组是否相等if (matches(sCount, pCount)) {result.add(left); // 记录起始索引}// 收缩窗口,移除最左边的字符sCount[s.charAt(left) - 'a']--;left++;}// 扩展窗口right++;}return result;
}// 辅助函数:比较两个频率数组是否相等
private boolean matches(int[] sCount, int[] pCount) {for (int i = 0; i < 26; i++) {if (sCount[i] != pCount[i]) {return false;}}return true;

子串

560.和为K的子数组

题目

给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的子数组的个数 。
子数组是数组中元素的连续非空序列。
在这里插入图片描述
题意:寻找连续子数组使其元素和为k,输出数组的个数
思路:遍历数组时计算前缀和,将前缀和出现的次数存放在哈希表中。对于遍历到下标i时,只需要知道在之前的前缀和值为prefixSum[i] - target出现的次数即可,然后把次数相加。

代码

class Solution {
public int subarraySum(int[] nums, int k) {
// 创建一个哈希表来存储前缀和及其出现的次数
Map<Integer, Integer> map = new HashMap<>();

    // 初始化前缀和为0的出现次数为1map.put(0, 1);int sum = 0; // 当前前缀和int count = 0; // 记录符合条件的子数组数量// 遍历数组中的每个元素for (int num : nums) {// 更新当前前缀和sum += num;// 检查是否存在前缀和 sum - kcount += map.getOrDefault(sum - k, 0);// 更新当前前缀和的出现次数map.put(sum, map.getOrDefault(sum, 0) + 1);}return count;
}

}

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

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

相关文章

Linux(CentOS)安装 Nginx

CentOS版本&#xff1a;CentOS 7 Nginx版本&#xff1a;1.24.0 两种安装方式&#xff1a; 一、通过 yum 安装&#xff0c;最简单&#xff0c;一键安装&#xff0c;全程无忧。 二、通过编译源码包安装&#xff0c;需具备配置相关操作。 最后附&#xff1a;设置 Nginx 服务开…

项目6:基于大数据校园一卡通数据分析和可视化

1、项目简介 本项目是基于大数据的清华校园卡数据分析系统&#xff0c;通过Hadoop&#xff0c;spark等技术处理校园卡交易、卡号和商户信息数据。系统实现消费类别、男女消费差异、学院消费排行和年级对比等分析&#xff0c;并通过Web后端和可视化前端展示结果。项目运行便捷&…

Django项目中创建app并快速上手(pycharm Windows)

1.打开终端 我选择的是第二个 2.运行命令 python manage.py startapp 名称 例如&#xff1a; python manage.py startapp app01 回车&#xff0c;等待一下&#xff0c;出现app01的文件夹说明创建成功 3.快速上手 1.app注册 增加一行 "app01.apps.App01Config"&#…

使用Docker + Ollama在Ubuntu中部署deepseek

1、安装docker 这里建议用docker来部署&#xff0c;方便简单 安装教程需要自己找详细的&#xff0c;会用到跳过 如果你没有安装 Docker&#xff0c;可以按照以下步骤安装&#xff1a; sudo apt update sudo apt install apt-transport-https ca-certificates curl software-p…

信创领域的PostgreSQL管理员认证

信创产业&#xff0c;全称为信息技术应用创新产业&#xff0c;是中国为应对国际技术竞争、保障信息安全、实现科技自立而重点发展的战略性新兴产业。其核心目标是通过自主研发和生态构建&#xff0c;逐步替代国外信息技术产品&#xff0c;形成自主可控的国产化信息技术体系。 发…

jemalloc的malloc案例来分析GOT表和PLT表有关流程

一、背景 在之前的博客 跟踪jemalloc 5.3.0的第一次malloc的源头原因及jemalloc相关初始化细节拓展-CSDN博客 里&#xff0c;我们分析了在preload jemalloc的库之后&#xff0c;main之前的一次malloc分配&#xff08;分配72704字节&#xff09;的源头原因并做了jemalloc的初始…

Centos Ollama + Deepseek-r1+Chatbox运行环境搭建

Centos Ollama Deepseek-r1Chatbox运行环境搭建 内容介绍下载ollama在Ollama运行DeepSeek-r1模型使用chatbox连接ollama api 内容介绍 你好&#xff01; 这篇文章简单讲述一下如何在linux环境搭建 Ollama Deepseek-r1。并在本地安装的Chatbox中进行远程调用 下载ollama 登…

使用sunshine和moonlight串流时的音频输出问题

设备&#xff1a;电脑和平板串流&#xff0c;把平板当副屏使用 1.如果启用安装steam音频驱动程序&#xff0c;则平板有声&#xff0c;电脑无声&#xff0c;在moonlight端可以设置平板和电脑同时发声&#xff0c;但是有点卡 2.只想电脑发声&#xff0c;平板无声 禁用安装steam…

微信小程序案例2——天气微信小程序(学会绑定数据)

文章目录 一、项目步骤1 创建一个weather项目2 进入index.wxml、index.js、index.wxss文件,清空所有内容,进入App.json,修改导航栏标题为“中国天气网”。3进入index.wxml,进行当天天气情况的界面布局,包括温度、最低温、最高温、天气情况、城市、星期、风行情况,代码如下…

如何在WPS和Word/Excel中直接使用DeepSeek功能

以下是将DeepSeek功能集成到WPS中的详细步骤&#xff0c;无需本地部署模型&#xff0c;直接通过官网连接使用&#xff1a;1. 下载并安装OfficeAI插件 &#xff08;1&#xff09;访问OfficeAI插件下载地址&#xff1a;OfficeAI助手 - 免费办公智能AI助手, AI写作&#xff0c;下载…

数字电路-基础逻辑门实验

基础逻辑门是数字电路设计的核心元件&#xff0c;它们执行的是基本的逻辑运算。通过这些基本运算&#xff0c;可以构建出更为复杂的逻辑功能。常见的基础逻辑门包括与门&#xff08;AND&#xff09;、或门&#xff08;OR&#xff09;、非门&#xff08;NOT&#xff09;、异或门…

哪吒闹海!SCI算法+分解组合+四模型原创对比首发!SGMD-FATA-Transformer-LSTM多变量时序预测

哪吒闹海&#xff01;SCI算法分解组合四模型原创对比首发&#xff01;SGMD-FATA-Transformer-LSTM多变量时序预测 目录 哪吒闹海&#xff01;SCI算法分解组合四模型原创对比首发&#xff01;SGMD-FATA-Transformer-LSTM多变量时序预测效果一览基本介绍程序设计参考资料 效果一览…

C++,STL 迭代器简介:概念、分类、操作

文章目录 引言一、迭代器的基本概念1.1 什么是迭代器?1.2 迭代器的意义二、迭代器的分类2.1 示意图:迭代器能力层级2.2 示例:不同迭代器的操作三、迭代器的常用操作3.1 基本操作3.2 随机访问迭代器专用操作示例代码:随机访问迭代器四、迭代器的通用用法4.1 遍历容器4.2 配合…

EasyExcel 导出合并层级单元格

EasyExcel 导出合并层级单元格 一、案例 案例一 1.相同订单号单元格进行合并 合并结果 案例二 1.相同订单号的单元格进行合并2.相同订单号的总数和总金额进行合并 合并结果 案例三 1.相同订单号的单元格进行合并2.相同订单号的商品分类进行合并3.相同订单号的总数和总金额…

常用的python库-安装与使用

常用的python库函数 yield关键字openslide库openslide对象的常用属性 cv2库numpy库ASAP库-multiresolutionimageinterface库ASAP库的安装ASAP库的使用 concurrent.futures.ThreadPoolExecutorxml.etree.ElementTree库skimage库PIL.Image库 PIL.Image.Imagedetectron2库数据增强…

C++基础系列【8】如何解决编译器报的错误

博主介绍&#xff1a;程序喵大人 35- 资深C/C/Rust/Android/iOS客户端开发10年大厂工作经验嵌入式/人工智能/自动驾驶/音视频/游戏开发入门级选手《C20高级编程》《C23高级编程》等多本书籍著译者更多原创精品文章&#xff0c;首发gzh&#xff0c;见文末&#x1f447;&#x1f…

程序诗篇里的灵动笔触:指针绘就数据的梦幻蓝图<8>

大家好啊&#xff0c;我是小象٩(๑ω๑)۶ 我的博客&#xff1a;Xiao Xiangζั͡ޓއއ 很高兴见到大家&#xff0c;希望能够和大家一起交流学习&#xff0c;共同进步。 今天我们复习前面学习的指针知识 目录 关于指针数组和数组指针的区别指针数组&#xff08;Array of Poi…

UE5.5 PCGFrameWork--GPU CustomHLSL

在上一篇UE5.5 PCGFrameWork使用入门-CSDN博客 大致介绍了UE5 PCG框架的基本使用. 本篇探索PCGFrame的高级应用--GPU点云。也就是利用GPU HLSL编程对点云进行操纵&#xff0c;可以大幅度提升点云生成效率。 目前在UE5 PCG框架中&#xff0c;点云GPU的应用大致分为三类: Point…

Games202 Lecture11 LTC | Disney principled BRDF | NPR

Shading with microfacet BRDFs under polygonal lighting -Linearly Transformed Cosines(LTC)Real-Time PBR Materials cont. -Disney principled BRDFNon-photorealistic rendering(NPR) Linearly Transformed Cosines(LTC) lobe花瓣 BRDF的2d形状 基本思路: 任意BRDF变…

Flink 内存模型各部分大小计算公式

Flink 的运行平台 如果 Flink 是运行在 yarn 或者 standalone 模式的话&#xff0c;其实都是运行在 JVM 的基础上的&#xff0c;所以首先 Flink 组件运行所需要给 JVM 本身要耗费的内存大小。无论是 JobManager 或者 TaskManager &#xff0c;他们 JVM 内存的大小都是一样的&a…