LeetCode 中有关数组的题目(JAVA代码实现)

 1.两数之和

作为力扣的第一题,我估计很多新手在这里就被劝退了,但其实这道题不难,我们用map存储我们找到的目标整数,当循环结束之后,如果找到,就返回找到的两个整数的数组,如果没找到,直接返回一个空数组。

class Solution{public int[] twoSum(int[] nums, int target) {Map<Integer,Integer> hashtable =new HashMap<Integer,Integer>();for(int i =0; i<nums.length;i++){if(hashtable.containsKey(target -nums[i])){return new int[]{hashtable.get(target-nums[i]),i};                }hashtable.put(nums[i],i);//将找到的整数值和索引存在hash表中}return new int[0];//返回一个空数组}
}

 运行数据:

 2.两数相加

 

 这道题如果用正常的思路来想的话,那就是先把这两个链表进行翻转,然后将反转后的链表各结点上的值进行相加等到sum,最后把这个sum再进行反转,把这个反转的值再转换成单个值存储到链表的节点上。

但是这样子就很麻烦,而且实现起来也不简单,我们可以用进位制来实现这个算法,满10进1,否则为0,这样子不断向后移动存储相加的值,这样子实现起来是不是就简单的多。

class Solution {public ListNode addTwoNumbers(ListNode l1, ListNode l2) {//设置两个链表的头结点,并进行初始ListNode head =null,tail=null;int carry =0;//遍历两个列表,直到有个链表遍历完while(l1!=null||l2!=null){//判断l1和l2是否为空,如果不为空,那么就获取当前的l1和l2的值int n1 =l1!=null?l1.val:0;int n2 =l2!=null?l2.val:0;//将两个链表的值以及进位制进行相加int sum =n1+n2+carry;//如果为空,那么创建新的链表头和链表尾if(head==null){//创建新的节点,并设置其值的和为当前的个位数。同时设置新链表的头和尾都指向这个节点head =tail =new ListNode(sum%10);}else{//在尾节点后面创建一个新的节点,并将当前和为个位数作为节点的值tail.next=new ListNode(sum%10);//更新尾部节点,使其指向新创建的节点tail =tail.next;}carry =sum/10;//计算当前的进位,即当前的和的十位数if(l1!=null){l1 =l1.next;//如果l1不为空,则移动到下一个节点}if(l2!=null){l2 =l2.next;//如果l2不为空,则移动到下一个节点}}//如果还有剩余的进位值,那么将其添加到链表的尾部if(carry>0){tail.next =new ListNode(carry);}//返回新的链表的头节点。这个新链表表示两个输入数字的和return head;}
}

3.无重复字符的最大子串

 这道题的思路还是简单的,首先我们需要两个指针,一个end用于不断向后获取s字符串中的字符,并将其存入map中,当end将要存入下一个字符时,判断map中是否有相同的字符,如果存在,就将strat更新为此位置,然后ans是用来存入start和end的最大不重复子串的最大值,整个循环结束之后,返回ans就OK了。

class Solution {public int lengthOfLongestSubstring(String s) {int n =s.length(),ans =0;Map<Character,Integer> map =new HashMap<>();for(int end =0,start=0;end<n;end++){char alpha =s.charAt(end);if(map.containsKey(alpha)){start=Math.max(map.get(alpha),start);}ans =Math.max(ans,end-start+1);map.put(s.charAt(end),end+1);}return ans;}
}

感觉这个运行和空间效率还是一般般,我们来优化一下,首先是内存这里,我们用来Map,这玩意还是蛮占空间的,而且查询效率较低,这里我们换数组,接下来的思路是滑动窗口,这里我们还是准备两个指针left和right,然后再来一个max用来记录我们目前碰到的不重复子串的最大值,right用于不断向后获取字符c,在中间先判断字符c在has数组中有无出现过,如果存在,left就向后面移动一位缩小窗口,并记入为false存入数组中,如果不存在就记入为true存入数组中,当循环结束的时候,ans便得到了最大的数值,返回即可。

class Solution {public int lengthOfLongestSubstring(String S) {char[] s = S.toCharArray(); // 转换成 char[] 加快效率(忽略带来的空间消耗)int n = s.length, ans = 0, left = 0;boolean[] has = new boolean[128]; // 也可以用 HashSet<Character>,这里为了效率用的数组for (int right = 0; right < n; right++) {char c = s[right];// 如果窗口内已经包含 c,那么再加入一个 c 会导致窗口内有重复元素// 所以要在加入 c 之前,先移出窗口内的 cwhile (has[c]) { // 窗口内有 chas[s[left++]] = false; // 缩小窗口}has[c] = true; // 加入 cans = Math.max(ans, right - left + 1); // 更新窗口长度最大值}return ans;}
}

看看结果,直接超过了百分之百的人! 

 

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

pycharm创建新python环境(切换版本)详细图解版——最简单的方法实现python环境切换

先按操作&#xff0c;进行python版本的切换 下面这种方式是切换你本地已经下载了的python环境 我比较推荐下面这种方法&#xff0c;前提是你已经安装了anaconda 在这里&#xff0c;你可以创建2.7到3.10任意版本的虚拟环境 选择了创建好的环境后&#xff0c;如果对你所需要的…

鸿蒙仓颉语言【模块module】

module 模块 模块配置文件&#xff0c;这里指项目的modules.json 文件&#xff0c;用于描述代码项目的基础元属性。 {"name": "file name", //当前项目的名称"description": "项目描述", //项目描述"version": "1.0…

【数据脱敏】⭐️SpringBoot 整合 Jackson 实现隐私数据加密

目录 &#x1f378;前言 &#x1f37b;一、Jackson 序列化库 &#x1f37a;二、方案实践 2.1 环境准备 2.2 依赖引入 2.3 代码编写 &#x1f49e;️三、接口测试 &#x1f379;四、章末 &#x1f378;前言 小伙伴们大家好&#xff0c;最近也是很忙啊&#xff0c;上次的文章…

好玩新游:辛特堡传说中文免费下载,Dungeons of Hinterberg 游戏分享

在游戏中&#xff0c;你将扮演Luisa&#xff0c;一个被现实生活拖得疲惫不堪的法律实习生。她决定暂时远离快节奏的公司生活&#xff0c;踏上征服辛特堡地下城的旅程…她会在第一天就被击退&#xff0c;还是能成为顶级猎魔人呢&#xff1f;只有一个办法可以找到答案... 体验刺激…

Go语言os包全攻略:文件、目录、环境变量与进程管理

Go语言os包全攻略&#xff1a;文件、目录、环境变量与进程管理 简介文件操作文件创建与删除文件创建文件删除 文件读写操作基本的文件读写操作使用缓冲区的文件读写 文件信息获取与修改文件路径操作获取绝对路径路径分割与合并 目录操作目录创建与删除目录创建目录删除 目录遍历…

Spring AI (三) 提示词对象Prompt

3.提示词对象Prompt 3.1.Prompt Prompt类的作用是创建结构化提示词, 实现了ModelRequest<List<Message>>接口 Prompt(String contents)&#xff1a;创建一个包含指定内容的Prompt对象。 Prompt(String contents, ChatOptions modelOptions)&#xff1a;创建一个…

AndroidStudio 编辑xml布局文件卡死问题解决

之前项目编写的都是正常&#xff0c;升级AndroidStudio后编辑布局文件就卡死&#xff0c;还以为是AndroidStudio文件。 其实不然&#xff0c;我给整个项目增加了版权声明。所以全部跟新后&#xff0c;布局文件也增加了版权声明。估计AndroidStudio在 解析布局文件时候因为有版…

【Redis】主从复制分析-基础

1 主从节点运行数据的存储 在主从复制中, 对于主节点, 从节点就是自身的一个客户端, 所以和普通的客户端一样, 会被组织为一个 client 的结构体。 typedef struct client {// 省略 } client;同时无论是从节点, 还是主节点, 在运行中的数据都存放在一个 redisServer 的结构体中…

智能停车场系统

项目名称&#xff1a;智能停车场系统 1.项目技术栈&#xff1a; 前后端分离的项目 后端&#xff1a;Springboot MybatisPlus 前端&#xff1a;Vue ElementUI 数据库&#xff1a; MySQL 2.项目功能介绍 以脚手架项目为基础完成的 1.主页&#xff1a;echarts展示的图表…

1 go语言环境的搭建

本专栏将从基础开始&#xff0c;循序渐进&#xff0c;由浅入深讲解Go语言&#xff0c;希望大家都能够从中有所收获&#xff0c;也请大家多多支持。 查看相关资料与知识库 专栏地址:Go专栏 如果文章知识点有错误的地方&#xff0c;请指正&#xff01;大家一起学习&#xff0c;…

C#中栈和堆以及修饰符

关于堆中字符串的存放 string s1"123" string s2"123" string s1"456" 此时s1输出为456 而s2仍然为123 因为在使用 String str "字符串" 的方式来创建String变量的时候&#xff0c;那么String的值便会存储在String常量池中&#x…

算法日记day 17(二叉树的最大、最小深度)

一、二叉树的最大深度 题目&#xff1a; 给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;3示例 2&#xff1…

Redis底层数据结构-双向链表

链表提供了高效的节点重排能力&#xff0c;以及顺序性的节点访问方式&#xff0c;并且可以通过增删节点来灵活地调整链表的长度。C语言并没有内置这种数据结构&#xff0c;独立实现。 实现 节点结构adlist.h/listNode typedef struct listNode {// 前置节点struct listNode …

pycharm的开头中设置作者开发时间等信息成为模板

就是在pycharm中写代码的时候&#xff0c;开头会有一些代码相关的信息&#xff0c;比如说作者&#xff0c;比如说开发时间等等&#xff0c;如果每次都写比较麻烦&#xff0c;其实pycharm中可以设置成模板&#xff0c;而且时间还会自动更新。 一&#xff0c;打开pycharm点文件&…

Django cursor()增删改查和shell环境执行脚本

在Django中&#xff0c;cursor()方法是DatabaseWrapper对象&#xff08;由django.db.connectio提供&#xff09;的一个方法&#xff0c;用于创建一个游标对象。这个游标对象可以用来执行SQL命令&#xff0c;从而实现对数据库的增删改查操作。 查询&#xff08;Select&#xff0…

设计分享—国外医疗行业界面设计

医疗诊断界面是一个直观且信息丰富的数字平台&#xff0c;它集成了患者基本信息、病史记录、当前症状描述、检查结果展示以及智能诊断建议等功能于一体。 界面设计简洁明了&#xff0c;便于医生快速浏览关键信息&#xff0c;同时利用先进的算法辅助医生进行精准诊断&#xff0…

鸿蒙系统(java方法以及数据结构)

在java中数据结构是以类和对象的形式实现的&#xff0c;常见的数据结构及其简单实现 1.数组&#xff08;Array&#xff09; 2.链表&#xff08;Linked List&#xff09; 3.栈&#xff08;Stack&#xff09; 4.队列&#xff08;Queue&#xff09; 5.哈希表&#xff08;Hash…

elasticsearch8.14.1集群安装部署

elasticsearch安装部署&#xff0c;首先需要准备至少三台服务器&#xff0c;本例再windows11下安装三台vmware虚拟机&#xff0c;利用centOS7系统模拟服务器环境。 本例假设你已经安装了三台vmware和centOS7&#xff0c;且centOS7运行正常。接下来我们直接讲解elasticsearch下载…

Linux(linux命令)和Window(powershell)的查找命令

目录 LinuxWindow基本操作(1)Get-ChildItem(2)Get-ChildItem模糊查找1. 使用星号(*)通配符(常用)1、第一个命令:使用 `-Filter` 参数(常用)2、第二个命令:使用管道和 `Where-Object`3、差异2. 使用问号(?)通配符(不常用)3. 结合使用星号和问号(不常用)4. 使…

3GPP R18 Multi-USIM是怎么回事?(四)

前几篇主要是MUSIM feature NAS 部分内容的总结,这篇开始看RRC部分相关的内容,由于RRC部分内容过长,也分成了2篇。这篇就着重看下musim gap以及RRC触发UE离开RRC Connected mode相关的内容,直入正题, 上面的内容在overview中有提到,对应的是如下38.300中的描述。 处于网络…