【java API】leetcode常用刷题API及ACM模式

文章目录

      • ACM输入 Scanner
      • **一、字符串高频API**
      • **二、集合高频API**
      • **三、栈(Stack)高频API**
        • **1. 推荐用`Deque`替代`Stack`类**(更高效且线程不安全,适合算法场景)
        • **2. 核心操作**
        • **3. 经典应用场景**
        • **4. 避坑指南**
      • **四、链表(LinkedList)高频API**
        • **1. 内置`LinkedList`类**
        • **2. 核心操作**
        • **3. 自定义链表节点**(LeetCode常用)
        • **4. 经典应用场景**
        • **5. 避坑指南**
      • **五、实用代码片段**
        • **1. 用栈实现队列**
        • **2. 快慢指针找链表中点**

ACM输入 Scanner

import java.util.Scanner; public class ScannerDemo {public static void main(String[] args) {Scanner scan = new Scanner(System.in);// 从键盘接收数据// next方式接收字符串System.out.println("next方式接收:");// 判断是否还有输入if (scan.hasNext()) {String str1 = scan.next();System.out.println("输入的数据为:" + str1);}scan.close();}
}

$ javac ScannerDemo.java
$ java ScannerDemo
next方式接收:
runoob com
输入的数据为:runoob

可以看到 com 字符串并未输出

使用 nextLine 方法:

 // 判断是否还有输入if (scan.hasNextLine()) {String str2 = scan.nextLine();System.out.println("输入的数据为:" + str2);}

runoob com
输入的数据为:runoob com

如果要输入 int 或 float 类型的数据,在 Scanner 类中也有支持,但是在输入之前最好先使用 hasNextXxx() 方法进行验证,再使用 nextXxx() 来读取。

在这里插入图片描述

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

在这里插入图片描述

以下是针对ACM模式刷题时,字符串和集合相关的高频Java API总结(按使用频率排序):


一、字符串高频API

  1. String类
String str = "abc";
// 基础操作
str.length()              // 字符串长度
str.charAt(int index)     // 获取字符(高频)
str.substring(int start) // 截取子串(含start)
str.substring(int start, int end) // 截取[start,end)
str.split(String regex)  // 分割字符串(高频,如处理输入)
str.toCharArray()        // 转字符数组(高频用于遍历)
str.equals(String other) // 比较内容(非地址)
str.indexOf(String s)    // 查找子串位置// 类型转换
Integer.parseInt(str)    // 字符串转整数(高频)
String.valueOf(int/double...) // 其他类型转字符串(高频)
str.toLowerCase() / toUpperCase() // 大小写转换// 其他
str.trim()               // 去除首尾空格
str.replace(old, new)    // 替换字符/字符串
str.contains(String s)   // 是否包含子串
  1. StringBuilder(高频!线程不安全但更快)
StringBuilder sb = new StringBuilder();
sb.append("a")           // 追加内容(高频)
sb.insert(index, "x")    // 插入
sb.delete(start, end)    // 删除
sb.reverse()             // 反转(高频用于回文题)
sb.toString()            // 转String(最终输出)
  1. Character
Character.isLetter()
Character.toLowerCase()

二、集合高频API

  1. List(ArrayList最常用)
List<Integer> list = new ArrayList<>();
// 基础操作
list.add(element)        // 添加元素(高频)
list.get(int index)      // 获取元素(高频)
list.size()              // 元素个数(高频)
list.remove(int index)   // 按索引删除
list.remove(Object o)    // 按对象删除
list.contains(Object o)  // 是否包含元素
list.isEmpty()           // 判空// 工具方法
Collections.sort(list)   // 排序(高频)
Collections.reverse(list) // 反转
Collections.max(list) / min(list) // 最大/最小值
Collections.fill(list, val) // 填充// 数组互转
Arrays.asList(T... a)    // 数组转List(注意返回固定大小List)
list.toArray(new T[0])   // List转数组
  1. Map(HashMap最常用)
Map<K, V> map = new HashMap<>();
// 基础操作
map.put(key, value)      // 添加/覆盖键值对(高频)
map.get(key)             // 获取值(高频)
map.containsKey(key)     // 是否包含键(高频)
map.getOrDefault(key, defaultValue) // 安全获取
map.remove(key)          // 删除键
map.size()              // 键值对数量// 遍历(高频)
for (Map.Entry<K, V> entry : map.entrySet())//PriorityQueue(优先队列)
PriorityQueue<Map.Entry<Character, Integer>> pq = new PriorityQueue<>((a, b) -> b.getValue() - a.getValue()
);
pq.addAll(map.entrySet());

以下是栈(Stack)和链表(LinkedList)在ACM模式刷题时的高频Java API总结,包含核心操作和避坑指南:


三、栈(Stack)高频API

1. 推荐用Deque替代Stack(更高效且线程不安全,适合算法场景)
Deque<Integer> stack = new ArrayDeque<>();
2. 核心操作
方法说明示例
push(e)入栈stack.push(5);
pop()出栈(空栈会抛异常int top = stack.pop();
peek()查看栈顶元素(不删除)int top = stack.peek();
isEmpty()判断栈是否为空if (stack.isEmpty()) {...}
size()获取元素个数int len = stack.size();
3. 经典应用场景
  • 括号匹配:用栈存储左括号,遇到右括号时弹栈匹配
  • 单调栈:维护栈内元素单调性(递增/递减)
  • 表达式求值:处理运算符优先级
4. 避坑指南
  • 空栈检查pop()peek()前必须检查栈是否为空,否则会抛出NoSuchElementException
  • 性能对比:优先用ArrayDeque而非Stack类(后者同步操作性能差)

四、链表(LinkedList)高频API

1. 内置LinkedList
LinkedList<Integer> list = new LinkedList<>();
2. 核心操作
方法说明时间复杂度
addFirst(e)头部插入元素O(1)
addLast(e)尾部插入元素O(1)
removeFirst()删除头部元素(空链表抛异常O(1)
removeLast()删除尾部元素(空链表抛异常O(1)
getFirst()获取头部元素(不删除)O(1)
getLast()获取尾部元素(不删除)O(1)
get(int index)获取第index个元素(低效,慎用O(n)
size()获取链表长度O(1)
3. 自定义链表节点(LeetCode常用)
class ListNode {int val;ListNode next;ListNode(int x) { val = x; }
}
// 操作示例:反转链表
ListNode dummy = new ListNode(-1);
while (head != null) {ListNode next = head.next;head.next = dummy.next;dummy.next = head;head = next;
}
return dummy.next;
4. 经典应用场景
  • 链表反转:迭代或递归修改指针指向
  • 合并有序链表:双指针遍历比较
  • 快慢指针:检测环、找中点(如判断回文链表)
  • 虚拟头节点:简化头节点边界处理
5. 避坑指南
  • 指针丢失:修改链表节点指针时,注意提前保存next节点
  • 循环引用:操作链表后注意检查是否成环
  • 性能陷阱:避免频繁调用get(index)(链表随机访问是O(n))

五、实用代码片段

1. 用栈实现队列
class MyQueue {Deque<Integer> inStack = new ArrayDeque<>();Deque<Integer> outStack = new ArrayDeque<>();public void push(int x) {inStack.push(x);}public int pop() {if (outStack.isEmpty()) {while (!inStack.isEmpty()) {outStack.push(inStack.pop());}}return outStack.pop();}
}
2. 快慢指针找链表中点
ListNode slow = head, fast = head;
while (fast != null && fast.next != null) {slow = slow.next;       // 慢指针走1步fast = fast.next.next;  // 快指针走2步
}
// slow即为中点(偶数个节点时靠左)

掌握这些API和技巧后,可以高效解决栈和链表相关的算法题,注意边界条件和指针操作的细节!

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

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

相关文章

云计算——AWS Solutions Architect – Associate(saa)4.安全组和NACL

安全组一充当虚拟防火墙对于关联实例&#xff0c;在实例级别控制入站和出站流量。 网络访问控制列表(NACL)一充当防火墙关联子网&#xff0c;在子网级别控制入站和出站流量。 在专有网络中&#xff0c;安全组和网络ACL(NACL)一起帮助构建分层网络防御。 安全组在实例级别操作…

网络防御高级

接口配置&#xff1a; SW2: [sw2]vlan 10 [sw2]vlan 20 [sw2]interface GigabitEthernet 0/0/1 [sw2-GigabitEthernet0/0/1]port link-type trunk [SW2-GigabitEthernet0/0/1]port trunk allow-pass vlan 10 20 [sw2]interface GigabitEthernet 0/0/2 [sw2-GigabitEthernet0/0/…

在服务器部署JVM后,如何评估JVM的工作能力,比如吞吐量

在服务器部署JVM后&#xff0c;评估其工作能力&#xff08;如吞吐量&#xff09;可以通过以下步骤进行&#xff1a; 1. 选择合适的基准测试工具 JMH (Java Microbenchmark Harness)&#xff1a;适合微基准测试&#xff0c;测量特定代码片段的性能。Apache JMeter&#xff1a;…

Kokoro 开源文本转语音引擎上线!多语言支持,无需联网,浏览器内极速运行

Kokoro 是一款轻量级的开源文本转语音(TTS)引擎,凭借其高效能和轻量化设计,迅速在技术社区中引起关注。本文将详细介绍 Kokoro 的主要特点,并提供在浏览器和 Python 环境中的代码示例,帮助您快速上手。 1. Kokoro:可在浏览器中运行的 TTS 引擎 1.1 简介 Kokoro 是一个…

html为<td>添加标注文本

样式说明&#xff1a; /*为td添加相对定位点*/ .td_text {position: relative; }/*为p添加绝对坐标(相对于父元素中的定位点)*/ .td_text p {position: absolute;top: 80%;font-size: 8px; }参考资料&#xff1a;

鸿蒙音视频播放器:libwlmedia

libwlmedia 跨平台播放器wlmedia现在已经支持了鸿蒙(Harmony)平台了&#xff0c;SDK插件地址&#xff1a;libwlmedia 一、接入SDK 1.1 导入SDK ohpm i ywl5320/libwlmedia1.2 添加权限&#xff08;可选&#xff09; 如果需要播放网络视频&#xff0c;需要添加网络权限 #m…

使用Kickstart配置文件封装操作系统实现Linux的自动化安装

使用Kickstart配置文件封装操作系统实现Linux的自动化安装 创建ks.cfg配置文件 可以使用已经安装完成的Linux操作系统中的/root目录下的anaconda.cfg配置文件 注意&#xff0c;配置文件会因为kickstart的版本兼容性的问题导致无法安装报错需要在实际使用过程中删除某些参数 …

Generate html

"Generate HTML"&#xff08;生成 HTML&#xff09;指的是通过程序或工具自动创建 HTML 代码的过程。HTML&#xff08;超文本标记语言&#xff09;是用于创建网页内容和结构的标准语言。生成 HTML 通常意味着通过某些方式自动化地构建或生成网页的结构和元素&#xf…

ASP.NET Core SignalR案例:导入英汉词典

Ecdict 下载词典文件stardict.7z&#xff0c;解压&#xff0c;stardict.csv是一个CSV格式的文本文件&#xff0c;文件的第一行是表头&#xff0c;除第一行外&#xff0c;其他每行文本是一个单词的相关信息&#xff0c;用逗号分隔的就是各个列的值。英汉词典ECDICT中导入单词到…

计算机自学资源分享

分享本硕期间学习过、收藏过的一些计算机相关的课程、书籍、资源。大部分都是开源资源和免费资源&#xff0c;部分优质资源可能收费。 文章目录 综合资源PythonMachine LearningC/CJava前端SQL数据结构与算法计算机基础AIGC类求职电子资源GitHub 优质项目 综合资源 【指南】ka…

[7] 游戏机项目说明

[7] 游戏机项目说明 在这节课中&#xff0c;我们将学习如何基于FreeRTOS开发一个简单的游戏项目。我们会使用一个开源项目nwatch&#xff0c;它是一个基于STM32的开源手表&#xff0c;包含了三个游戏。我们的目标是将这个游戏移植到我们的开发板上&#xff0c;并逐步使用FreeR…

【清晰教程】通过Docker为本地DeepSeek-r1部署WebUI界面

【清晰教程】本地部署DeepSeek-r1模型-CSDN博客 目录 安装Docker 配置&检查 Open WebUI 部署Open WebUI 安装Docker 完成本地DeepSeek-r1的部署后【清晰教程】本地部署DeepSeek-r1模型-CSDN博客&#xff0c;通过Docker为本地DeepSeek-r1部署WebUI界面。 访问Docker官…

shell脚本控制——处理信号

Linux利用信号与系统中的进程进行通信。你可以通过对脚本进行编程&#xff0c;使其在收到特定信号时执行某些命令&#xff0c;从而控制shell脚本的操作。 1.重温Linux信号 Linux系统和应用程序可以产生超过30个信号。下表列出了在shell脚本编程时会遇到的最常见的Linux系统信…

2025web寒假作业二

一、整体功能概述 该代码构建了一个简单的后台管理系统界面&#xff0c;主要包含左侧导航栏和右侧内容区域。左侧导航栏有 logo、管理员头像、导航菜单和安全退出按钮&#xff1b;右侧内容区域包括页头、用户信息管理内容&#xff08;含搜索框和用户数据表格&#xff09;以及页…

Node.js怎么调用到打包的python文件呢

在 Node.js 中调用打包后的 Python 可执行文件&#xff08;如 PyInstaller 生成的 .exe 或二进制文件&#xff09;&#xff0c;可以通过以下步骤实现&#xff1a; 一、Python 打包准备 假设已有打包好的 Python 文件 your_script.exe&#xff08;以 Windows 为例&#xff09;&…

【开源AI】AI一页一页读PDF

【开源AI】AI一页一页读PDF 可以在这里看 : 让AI 处理 PDF 文件,提取其中的知识点,并生成总结。 只是无法修改,后续若有更新在csdn这里。 【OpenAI】 API 更新: JSON 结构化输出约束机制( JSON Schema) 的一次实战。知识库的JSON Schema形式 每一页都要总结,总结的知识…

如何在 Qt 中添加和使用系统托盘图标

在 Qt 中实现系统托盘图标是一个常见的需求&#xff0c;尤其是在桌面应用程序中。系统托盘图标可以让应用程序在后台运行时仍然具有可见性&#xff0c;同时避免占用过多的桌面空间。本文将详细介绍如何在 Qt 项目中添加托盘图标&#xff0c;并通过资源系统&#xff08;.qrc 文件…

探索B-树系列

&#x1f308;前言&#x1f308; 本文将讲解B树系列&#xff0c;包含 B-树&#xff0c;B树&#xff0c;B*树&#xff0c;其中主要讲解B树底层原理&#xff0c;为什么用B树作为外查询的数据结构&#xff0c;以及B-树插入操作并用代码实现&#xff1b;介绍B树、B*树。 &#x1f4…

Python的

& 运算符可用于不同集合类型&#xff0c;它主要用于集合的交集操作 下面分别介绍它在 set&#xff08;集合&#xff09;和 frozenset&#xff08;不可变集合&#xff09;这两种常见集合类型中的使用 set 类型 set 是 Python 中内置的可变集合类型&#xff0c;使用 & …

深入与浅出-Python爬虫逆向实战

一、什么是爬虫逆向&#xff1f; 爬虫逆向&#xff0c;简单来说&#xff0c;就是通过分析网页的前端和后端行为&#xff0c;找出数据的来源和获取方式&#xff0c;从而实现自动化抓取。很多时候&#xff0c;直接使用requests和BeautifulSoup可能无法获取到目标数据&#xff0c…