删除排序链表中的重复元素 II(链表、双指针) 存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除链表中所有存在数字重复情况的节点,只保留原始链表中 没有重复出现_ _的数字。 返回同样按升序排列的结果链表。 示例 1: 输入:head = [1,2,3,3,4,4,5] 输出:[1,2,5] 示例 2: 输入:head = [1,1,1,2,3] 输出:[2,3] 提示
求素数和(数论算法) 求第m个到第n个素数之间的素数和 解答: import java.util.Scanner; public class All { public static void main(String[] args) { int a[] = new int[200]; int index = 0; for (int i = 1; i <
N皇后 II(回溯) n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互进攻。 给你一个整数 n ,返回 n 皇后问题 不同的解决方案的数量。 输入:n = 4 输出:2 解释:如上图所示,4 皇后问题存在两个不同的解法。 输入:n = 1 输出:1 示例 1: 示例 2: 提示: 1 <= n <= 9 皇后彼此不能相互进攻,也就是说:任何
单词搜索 II(字典树、数组) 给定一个 m x n 二维字符网格 board** **和一个单词(字符串)列表 words,找出所有同时在二维网格和字典中出现的单词。 单词必须按照字母顺序,通过 相邻的单元格 内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母在一个单词中不允许被重复使用。 示例 1: 输入:board = [["o",&
电话号码的字母组合(哈希表、字符串) 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 示例 1: 输入:digits = "23" 输出:["ad","ae","af","bd"
找质数(图算法) 找出大于200的最小的质数 解答: import java.util.*; import java.lang.*; import java.io.*; class Ideone { public static void main(String[] args) throws java.lang.Exception { int n = 201;
最大子序和(数组、分治) 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 示例 1: 输入:nums = [-2,1,-3,4,-1,2,1,-5,4] 输出:6 解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。 示例 2: 输入:nums = [1] 输出:1 示例 3: 输入:nums = [0] 输出:0 示例 4:
不同路径 II(数组、动态规划) 一个机器人位于一个 _m x n _网格的左上角 (起始点在下图中标记为“Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。 现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径? 网格中的障碍物和空位置分别用 1 和 0 来表示。 示例 1: 输入:obstacleGrid =
最大间距(数组、桶排序) 给定一个无序的数组,找出数组在排序之后,相邻元素之间最大的差值。 如果数组元素个数小于 2,则返回 0。 示例 1: 输入: [3,6,9,1] 输出: 3 解释: 排序后的数组是 [1,3,6,9], 其中相邻元素 (3,6) 和 (6,9) 之间都存在最大差值 3。 示例 2: 输入: [10] 输出: 0 解释: 数组元素个数小于 2,因此返回 0。 说明: 你可
回文链表(栈、递归) 给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。 示例 1: 输入:head = [1,2,2,1] 输出:true 示例 2: 输入:head = [1,2] 输出:false 提示: 链表中节点数目在范围[1, 105] 内 0 <= Node.val <= 9 **进阶:**你能否
滑动窗口最大值(队列、数组) 给你一个整数数组 nums,有一个大小为 k_ _的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回滑动窗口中的最大值。 示例 1: 输入:nums = [1,3,-1,-3,5,3,6,7], k = 3 输出:[3,3,5,5,6,7] 解释: 滑动窗口的位置 最大值
直线上最多的点数(几何、哈希表) 给你一个数组 points ,其中 points[i] = [xi, yi] 表示 X-Y 平面上的一个点。求最多有多少个点在同一条直线上。 示例 1: 输入:points = [[1,1],[2,2],[3,3]] 输出:3 示例 2: 输入:points = [[1,1],[3,2],[5,3],[4,1],[2,3],[1,4]] 输出:4 提示: 1
有序链表转换二叉搜索树(树) 给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树。 本题中,一个高度平衡二叉树是指一个二叉树_每个节点 _的左右两个子树的高度差的绝对值不超过 1。 示例: 给定的有序链表: [-10, -3, 0, 5, 9], 一个可能的答案是:[0, -3, 9, -10, null, 5], 它可以表示下面这个高度平衡二叉搜索树: 0 /
搜索二维矩阵(数组、二分查找) 编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性: 每行中的整数从左到右按升序排列。 每行的第一个整数大于前一行的最后一个整数。 示例 1: 输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 3 输出:true 示例 2: 输入:matrix =
二叉树的层序遍历(树) 给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。 示例: 二叉树:[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回其层序遍历结果: [ [3], [9,20], [15,7] ] 解答: public class TreeNode { int val; Tree
拼接最大数(栈、贪心) 给定长度分别为 m 和 n 的两个数组,其元素由 0-9 构成,表示两个自然数各位上的数字。现在从这两个数组中选出 k (k <= m + n) 个数字拼接成一个新的数,要求从同一个数组中取出的数字保持其在原数组中的相对顺序。 求满足该条件的最大数。结果返回一个表示该最大数的长度为 k 的数组。 **说明: **请尽可能地优化你算法的时间和空间复杂度。 示例 1: 输
旋转图像(数组、数学) 给定一个 _n _× n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在** 原地** 旋转图像,这意味着你需要直接修改输入的二维矩阵。**请不要 **使用另一个矩阵来旋转图像。 示例 1: 输入:matrix = [[1,2,3],[4,5,6],[7,8,9]] 输出:[[7,4,1],[8,5,2],[9,6,3]] 示例 2:
设计学生类Student和它的一个子类Undergraduate(算法初阶) 设计一个学生类Student和它的一个子类Undergraduate,要求如下: Student类有name和age属性,一个包含两个人参数的构造器,用于给两属性赋值,一个show()方法打印Student的属性信息。 本科生类Undergraduate增加一个degree(学位)属性。有一个包含三参数的构造器,前两个
删除无效的括号(广度优先搜索、字符串) 给你一个由若干括号和字母组成的字符串 s ,删除最小数量的无效括号,使得输入的字符串有效。 返回所有可能的结果。答案可以按 任意顺序 返回。 示例 1: 输入:s = "()())()" 输出:["(())()","()()()"] 示例 2: 输入:s = "(a)())()"
阶乘后的零(数学) 给定一个整数 n ,返回 n! 结果中尾随零的数量。 提示 n! = n * (n - 1) * (n - 2) * ... * 3 * 2 * 1 示例 1: 输入:n = 3 输出:0 解释:3! = 6 ,不含尾随 0 示例 2: 输入:n = 5 输出:1 解释:5! = 120 ,有一个尾随 0 示例 3: 输入:n = 0 输出:0 提示: 0 <= n &
反转链表 II(链表) 给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 。 示例 1: 输入:head = [1,2,3,4,5], left = 2, right = 4 输出:[1,4,3,2,5] 示例 2: 输入:head = [5], left
正则表达式匹配(递归、字符串) 给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 '.' 和 '*' 的正则表达式匹配。 '.' 匹配任意单个字符 '*' 匹配零个或多个前面的那一个元素 所谓匹配,是要涵盖 **整个 **字符串 s的,而不是部分字符串。 示例 1: 输入:s = "aa" p = "a" 输出:false 解释:"a
单词搜索 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。 示例 1: 输入:board = [["A","B"
有效的括号(栈、字符串) 给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 示例 1: 输入:s = "()" 输出:true 示例 2: 输入:s = "()[]{}" 输出:true 示例 3: 输入:s =
颜色分类(数组、双指针) 给定一个包含红色、白色和蓝色,一共 n_ _个元素的数组,**原地(https://baike.baidu.com/item/%E5%8E%9F%E5%9C%B0%E7%AE%97%E6%B3%95)**对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。 此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。 示例 1: 输入:nums
单词反转(算法高阶、字符串匹配) 随便输出一个字符串 String str ="45abc,+de== fg"; 里面含有 abc,de,fg 三个单词 怎么处理能让单词反转,其他顺序不变呢 输出 “45cba,+ed==gf”; 解答: public class HelloWorld { public static String revstr(String s) {
最小覆盖子串(哈希表、字符串) 给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 "" 。 **注意:**如果 s 中存在这样的子串,我们保证它是唯一的答案。 示例 1: 输入:s = "ADOBECODEBANC", t = "ABC" 输出:&
最长连续序列(并查集、数组) 给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。 请你设计并实现时间复杂度为 O(n)_ _的算法解决此问题。 示例 1: 输入:nums = [100,4,200,1,3,2] 输出:4 解释:最长数字连续序列是 [1, 2, 3, 4]。它的长度为 4。 示例 2: 输入:nums = [0,3,7,2,5,8,
跳跃游戏(贪心、数组) 给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标。 示例 1: 输入:nums = [2,3,1,1,4] 输出:true 解释:可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。 示例 2: 输入:nums = [3,2,1,0
LRU 缓存机制(设计、哈希表) 运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制(https://baike.baidu.com/item/LRU) 。 实现 LRUCache 类: LRUCache(int capacity) 以正整数作为容量 capacity 初始化 LRU 缓存 int get(int key) 如果关键字 key 存在于缓存中,则返回关键字
Copyright © 2005-2025 51CTO.COM 版权所有 京ICP证060544号