leetcode(Hot100)——数组篇

1、两数之和

        本题使用哈希法,用一个哈希Map保存数组的值以及对应下标,代码如下:

class Solution {public int[] twoSum(int[] nums, int target) {HashMap<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 new int[] {-1,-1};}
}

2、字母异位词分组

        本题使用哈希法,使用哈希表存储每一组字母异位词,键为这组异位词的标志(将字符串排序后的字符串作为键),值为这组字母异位词形成的列表。

        代码如下:

class Solution {public List<List<String>> groupAnagrams(String[] strs) {Map<String,List<String>> map = new HashMap<>();for(String str : strs){char[] array = str.toCharArray();//将字符串转化成字符数组,方便排序Arrays.sort(array);String key = new String(array);//将排序后的字符数组转回字符串,当作哈希表的键List<String> list = map.getOrDefault(key,new ArrayList<String>());//从哈希表取出当前键对应的值,若无则默认返回一个数组列表list.add(str);//将当前字符串加入数组列表map.put(key,list);}return new ArrayList<>(map.values());}
}

3、最长连续序列

         考虑到数组中可能有重复元素需要去重,并且有查找操作,可以使用HashSet集合,既可以去除重复元素,又方便进行查找操作。

        遍历集合,如果有当前元素的后继元素,则序列长度++。 代码如下:

class Solution {public int longestConsecutive(int[] nums) {Set<Integer> hashSet = new HashSet<>();int ans = 0;for(int num : nums){hashSet.add(num);}for(int num : hashSet){//有前驱元素直接跳过,因为此时肯定不是最长序列。if(!hashSet.contains(num-1)){int local_max = 1;while(hashSet.contains(num+1)){local_max += 1;num += 1;}ans = Math.max(ans , local_max); }}return ans;}
}

4、移动零

        本题需要原地操作,使用双指针解决,快指针用于遍历旧数组,慢指针用于维护新数组。代码如下:

class Solution {public void moveZeroes(int[] nums) {int fast = 0;int slow = 0;while(fast < nums.length){if(nums[fast] == 0){fast++;}else{nums[slow] = nums[fast];slow++;fast++;}}for(int i=slow; i<nums.length; i++){nums[i] = 0;}}
}

 5、盛最多水的容器

        本题利用双指针分别指向数组头和尾,然后用一个变量保存最大面积,每记录一次,让指针移动一格,这里比较关键的点就是要让height值比较低的那个指针移动,最后当两个指针相碰时,结束循环 。

        代码如下:

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

6、三数之和

        本题采用排序+双指针的解法,关键点是需要去重,代码如下:

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

7、接雨水

        经典题目接雨水,思路就是用两个数组 left 和 right 分别保存当前柱子左侧和右侧的最高柱子(第一个和最后一个柱子不需要保存), 再分别求出每一列柱子能存储的水量。 代码如下:

class Solution {public int trap(int[] height) {int left[] = new int[height.length];int right[] = new int[height.length];int left_max = height[0];int right_max = height[height.length-1];int ans = 0;//当前柱子左侧的最高柱子for(int i=1; i<height.length-1; i++){left[i] = left_max;left_max = Math.max(left_max , height[i]);}//当前柱子右侧的最高柱子for(int i=height.length-2; i>=1; i--){right[i] = right_max;right_max = Math.max(right_max,height[i]);}for(int i=1; i<height.length-1; i++){int area = Math.max(0 , Math.min(left[i],right[i])-height[i]);ans += area;}return ans;}
}

8、和为 K 的子数组

        暴力双层for循环:

class Solution {public int subarraySum(int[] nums, int k) {int ans = 0;for(int i=0; i<nums.length; i++){int sum = 0;for(int j=i; j<nums.length; j++){sum += nums[j];if(sum == k){ans++;}}}return ans;}
}

 

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

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

相关文章

【网络基础】网络层基本协议介绍

目录 一、IP数据包 1.1 网络层的功能 1.2 IP数据包格式 二、ICMP协议介绍 2.1 作用 2.2 常用命令 2.2.1 Ping命令 2.2.2 tracert命令 2.3 广播域 三、ARP协议介绍 3.1 作用 3.2 原理 一、IP数据包 1.1 网络层的功能 定义了基于IP协议的逻辑地址&#xff0c;就是I…

数据结构应用——哈夫曼树

哈夫曼树 哈夫曼树的相关概念构造哈夫曼树基础算法 哈夫曼编码 哈夫曼树的相关概念 结点的权&#xff1a;有某种现实含义的数值。结点的带权路径长度&#xff1a;从树的根结点到该结点的路径长度&#xff08;经过的边数&#xff09;与该结点上权值的乘积。树的带权路径长度&am…

CAPL (Communication Access Programming Language)

CAPL (Communication Access Programming Language) 是一种专门用于模拟和测试汽车网络的脚本语言&#xff0c;特别是CAN (Controller Area Network) 和LIN (Local Interconnect Network) 网络。虽然CAPL主要用于模拟网络行为和测试网络节点&#xff0c;但它也支持一些基本的编…

XiBe希贝奶瓶好用吗?2名宝宝的宝爸深度测评分享!

几乎每个新手宝爸宝妈都会有一段时间对孩子的很多东西都是不懂的&#xff0c;一边摸索一边学习。列如关于奶瓶这个问题就困扰不少新手爸妈&#xff0c;特别是面对这么多的品牌的奶瓶完全不知道怎么选。 相信很多新手爸妈都十分担心奶瓶材质安全问题&#xff0c;所以我作为一名…

OpenCV+OpenCV-Contrib源码编译

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、OpenCV是什么&#xff1f;二、OpenCV 源码编译1.前期准备1.1 源码下载1.2 cmake安装1.3 vscode 安装1.4 git 安装1.5 mingw安装 2.源码编译2.1 打开cmake2.…

python(django)之流程接口管理后台开发

1、在models.py中加入流程接口表和单一接口表 代码如下&#xff1a; from django.db import models from product.models import Product# Create your models here.class Apitest(models.Model):apitestname models.CharField(流程接口名称, max_length64)apitester model…

Python学习笔记07

第十三章&#xff0c;面向对象 初识对象 生活中数据的组织 学校开学&#xff0c;要求学生填写自己的基础信息&#xff0c;一人发一张白纸&#xff0c;让学生自己填 我叫林军杰&#xff0c;今年31岁.来自山东省&#xff0c;我是男的&#xff0c;中国人 内容混乱 改为登记表…

详细分析Python中的enumerate()函数(附多个Demo)

目录 前言1. 基本知识2. Demo 前言 对于Python的基本函数&#xff0c;从实战中获取确切知识 1. 基本知识 enumerate() 接受一个可迭代对象作为输入&#xff0c;并返回一个枚举对象这个枚举对象包含了原始可迭代对象中的每个元素以及对应的索引它允许在循环中同时获取索引和值…

uboot - pinctrl - FPGA回片前测试阶段 - 设置GPIO引脚复用失败

问题描述 pinctrl设置引脚复用失败&#xff0c;没有调用到controller中的set_groups_function函数。 问题定位 pinctrl如何注册dm节点如何进行设备树中各个设备节点下的复用配置为什么没调用到控制器实现的set_groups_function函数 &gpio0 {status "okay";p…

Flutter插件开发与发布指南

在Flutter应用程序开发中&#xff0c;有时候我们会遇到需要使用原生功能的情况&#xff0c;这时候就需要编写Flutter插件来实现与原生平台的交互。本篇博客将介绍如何编写、发布和使用Flutter插件。 1. 准备工作 在开始之前&#xff0c;确保你已经安装好Flutter开发环境&…

JavaScript中改进的数组功能

ES6标准为数组添加了很多新功能&#xff0c;例如&#xff0c;创建数组的新方法&#xff0c;创建定型数组&#xff08;Typed Array)的能力等。 1、创建数组 在ES6以前&#xff0c;创建数组的方式主要有两种&#xff0c;一种是调用Array构造函数&#xff0c;另一种是用数组字面…

VMware Workstation Pro 17虚拟机超级详细搭建(含redis,nacos,docker)(一)

今天从零搭建一下虚拟机的环境&#xff0c;把nacos&#xff0c;redis等微服务组件还有数据库搭建到里面&#xff0c;首先看到的是我们最开始下载VMware Workstation Pro 17 之后的样子&#xff0c;总共一起应该有三部分因为篇幅太长了 下载地址 : VMware - Delivering a Digit…

Vue动态设置控制表格列表展现列

最近遇到一个需求,表格列表默认不展示某一列,当我设置后可以展示该列,也可以展示和隐藏别的列,起到可以对整个表格列展示隐藏控制的效果,如下示例,默认不展示“单位名称”这一列,在我点击设置齿轮后可以看到,有“单位名称”这一列,但未打钩: 当我勾中“单位名称”,…

第2讲-Memory(5)外存

磁盘存储器 组成 记录原理 性能指标 (磁盘存取时间的计算) 磁盘地址 工作过程 优点 ①存储容量大,位价格低; ②记录介质可重复使用; ③记录信息可长期保存而不丢失,甚至可脱机存档; ④非破坏性读出,读出时不需要再生。 缺点 存取速度慢,机械结构复杂,对工作环境…

在wps的word中如何引用正确引用参考文献

目录 插入参考文献编号把插入的编号置于右上角最终效果 插入参考文献编号 把插入的编号置于右上角 最终效果

面试算法-88-反转链表

题目 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1] 解 class Solution {public ListNode reverseList(ListNode head) {if(head null || hea…

大数据技术在工厂生产数字转型中的应用与价值

hello宝子们...我们是艾斯视觉擅长ui设计和前端开发10年经验&#xff01;希望我的分享能帮助到您&#xff01;如需帮助可以评论关注私信我们一起探讨&#xff01;致敬感谢感恩&#xff01; 随着大数据技术的快速发展&#xff0c;越来越多的企业开始关注并应用大数据技术&#x…

HCIP-Datacom(H12-821)新题

最新 HCIP-Datacom&#xff08;H12-821&#xff09;完整题库请扫描上方二维码访问&#xff0c;持续更新中。 以下关于OSPF的描述&#xff0c;哪些项是正确的&#xff1f; A. 第二类外部路由的开销值只是AS外部开销值&#xff0c;忽略AS内部开销值 B. AS-External-LSA描述的是…

prettier + eslint 配置

vue-cli 新建项目选择 ESLint Prettier 会自动下载相关包 settings.json {"editor.formatOnSave": true, // 开启保存文件自动格式化代码"editor.defaultFormatter": "esbenp.prettier-vscode", // 默认的代码格式化工具// "prettier.r…

应用日志集成到ElasticSearch

1、阿里云sls平台集成日志 阿里sls集成日志步骤 2、filebeat 收集到指定es 安装docker容器 Docker安装 拉取镜像&#xff1a; docker pull elastic/filebeat:7.5.1启动&#xff1a; docker run -d --namefilebeat elastic/filebeat:7.5.1拷贝容器中的数据文件到宿主机&a…