LeetCode 精选TOP 面试题
1.两数之加
1 | 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标。 |
1 | public class Problem_0001_TwoSum { |
2.两数相加
1 | 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 |
1 | public class Problem_0002_AddTwoNumbers { |
3.无重复字符的最长子串
1 | 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。 |
1 | public class Problem_0003_LongestSubstringWithoutRepeatingCharacters { |
4.寻找两个正序数组的中位数
1 | 给定两个大小为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的中位数。 |
1 | public class Problem_0004_MedianOfTwoSortedArrays { |
5.最长回文子串
1 | 给你一个字符串 s,找到 s 中最长的回文子串。 |
7.整数反转
1 | 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。 |
1 | public class Problem_0007_ReverseInteger { |
10.正则表达式匹配
1 | 给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 '.' 和 '*' 的正则表达式匹配。 |
1 | public static boolean isValid(char[] str, char[] pattern) { |
11.盛最多水的容器
1 | 给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 |
1 | public class Problem_0011_ContainerWithMostWater { |
12.整数转罗马数字
1 | 链接:https://leetcode-cn.com/problems/integer-to-roman/ |
1 | public class Problem_0012_IntegerToRoman { |
13.罗马数字转整数
1 | 链接:https://leetcode-cn.com/problems/roman-to-integer/ |
1 | public class Problem_0013_RomanToInteger { |
14最长公共前缀
1 | 编写一个函数来查找字符串数组中的最长公共前缀。 |
1 | public class Problem_0014_LongestCommonPrefix { |
15.三数之和
1 | 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。 |
1 | public static List<List<Integer>> threeSum1(int[] nums) { |
17.电话号码的字母组合
1 | 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。 |
1 | public class Problem_0017_LetterCombinationsOfAPhoneNumber { |
19.删除链表的倒数第N个节点
1 | 给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。 |
1 | public class Problem_0019_RemoveNthNodeFromEndofList { |
20.有效的括号
1 | 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。 |
1 | public class Problem_0020_ValidParentheses { |
21.合并两个有序链表
1 | 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 |
1 | public class Problem_0021_MergeTwoSortedLists { |
22.括号生成
1 | 数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合 |
1 | public static List<String> generateParenthesis(int n) { |
23.合并K个升序链表
1 | 给你一个链表数组,每个链表都已经按升序排列。 |
1 | public class Problem_0023_MergeKSortedLists { |
26.删除排序数组中的重复项
1 | 给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。 |
1 | public class Problem_0026_RemoveDuplicatesFromSortedArray { |
28.实现strStr函数
1 | KMP算法:https://midkuro.gitee.io/2020/10/30/algorithm-trainingcamp1/#KMP%E7%AE%97%E6%B3%95 |
29.两数相除
1 | 给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。 |
1 | public class Problem_0029_DivideTwoIntegers { |
33.搜索旋转排序数组
1 | 升序排列的整数数组 nums 在预先未知的某个点上进行了旋转(例如, [0,1,2,4,5,6,7] 经旋转后可能变为 [4,5,6,7,0,1,2] )。 |
1 | public class Problem_0033_SearchInRotatedSortedArray { |
34.在排序数组中查找元素的第一个和最后一个位置
1 | 给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。 |
1 | public class Problem_0034_FindFirstAndLastPositionOfElementInSortedArray { |
36.有效的数独
1 | 判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。 |
1 | public class Problem_0036_ValidSudoku { |
37.解数独
1 | 编写一个程序,通过填充空格来解决数独问题。 |
1 | public class Problem_0037_SudokuSolver { |
41.缺失的第一个整数
1 | 给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。 |
1 | public class Problem_0041_FirstMissingPositive { |
42.接雨水
1 | 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 |
1 | public class Problem_0042_TrappingRainWater { |
44.通配符匹配
1 | 给定一个字符串 (s) 和一个字符模式 (p) ,实现一个支持 '?' 和 '*' 的通配符匹配。 |
1 | public static boolean isMatch1(String str, String pattern) { |
1 | // 最终做的化简 |
55.跳跃游戏
1 | 给定一个非负整数数组,你最初位于数组的第一个位置。 |
1 | public class Problem_0055_JumpGame { |
45.跳跃游戏 II
1 | 给定一个非负整数数组,你最初位于数组的第一个位置。 |
1 | public class Problem_0045_JumpGameII { |
45.跳跃游戏 III
1 | 进阶:给定一个起始下标和结束下标,可以往左跳,也可以往右跳,固定位置跳,问最少跳几次从起始下标跳到结束下标 |
46.全排列
1 | 给定一个 没有重复 数字的序列,返回其所有可能的全排列。 |
1 | public static List<List<Integer>> permute(int[] nums) { |
48.旋转图像
1 | 给定一个 n × n 的二维矩阵表示一个图像。 |
1 | public class Problem_0048_RotateImage { |
49.字母异位词分组
1 | 给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。 |
1 | public static List<List<String>> groupAnagrams2(String[] strs) { |
50.Pox(x, n)
1 | 实现 pow(x, n) ,即计算 x 的 n 次幂函数 |
1 | public static double myPow2(double x, int n) { |
53.最大子序和
1 | 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 |
1 | public int maxSubArray(int[] nums) { |
54.螺旋矩阵
1 | 给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。 |
1 | public class Problem_0054_SpiralMatrix { |
56.合并区间
1 | 给出一个区间的集合,请合并所有重叠的区间。 |
1 | public class Problem_0056_MergeIntervals { |
62.不同路径
1 | 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 |
1 | public class Problem_0062_UniquePaths { |
66.加一
1 | 给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。 |
1 | public class Problem_0066_PlusOne { |
69.x的平方根
1 | 实现 int sqrt(int x) 函数。 |
1 | public class Problem_0069_SqrtX { |
70.爬楼梯
1 | 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 |
1 | public class Problem_0070_ClimbingStairs { |
73.矩阵置零
1 | 给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法。 |
1 | public static void setZeroes2(int[][] matrix) { |
75.颜色分类
1 | 给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。 |
1 | public class Problem_0075_SortColors { |
76.最小覆盖子串
1 | 给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 "" 。 |
1 | public class Problem_0076_MinimumWindowSubstring { |
78.子集
1 | 给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。 |
1 | public class Problem_0078_Subsets { |
79.单词搜索
1 | 给定一个二维网格和一个单词,找出该单词是否存在于网格中。 |
1 | public class Problem_0079_WordSearch { |
84.柱状图中最大的矩形
1 | 给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。 |
1 | public class Problem_0084_LargestRectangleInHistogram { |
88.合并两个有序数组
1 | 给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。 |
1 | public class Problem_0088_MergeSortedArray { |
91.解码方法
1 | 一条包含字母 A-Z 的消息通过以下映射进行了 编码 : |
1 | public static int numDecodings2(String s) { |
94.二叉树的中序遍历
1 | 给定一个二叉树的根节点 root ,返回它的 中序 遍历。 |
1 | public class Problem_0094_BinaryTreeInorderTraversal { |
98.验证二叉搜索树
1 | 给定一个二叉树,判断其是否是一个有效的二叉搜索树。 |
1 | public class Problem_0098_ValidateBinarySearchTree { |
101.对称二叉树
1 | 给定一个二叉树,检查它是否是镜像对称的。 |
1 | public class Problem_0101_SymmetricTree { |
102.二叉树的层序遍历
1 | 给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。 |
1 | public class Problem_0102_BinaryTreeLevelOrderTraversal { |
103.二叉树的锯齿形层序遍历
1 | 给定一个二叉树,返回其节点值的锯齿形层序遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。 |
1 | public class Problem_0103_BinaryTreeZigzagLevelOrderTraversal { |
104.二叉树最大深度
1 | 给定一个二叉树,找出其最大深度。 |
1 | public class Problem_0104_MaximumDepthOfBinaryTree { |
105.从前序与中序遍历序列构造二叉树
1 | 根据一棵树的前序遍历与中序遍历构造二叉树。 |
1 | public class Problem_0105_ConstructBinaryTreeFromPreorderAndInorderTraversal { |
108.将有序数组转换为二叉搜索树
1 | 将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。 |
1 | public class Problem_0108_ConvertSortedArrayToBinarySearchTree { |
116.填充每个节点的下一个右侧节点指针
1 | 给定一个 完美二叉树 ,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下: |
1 | public class Problem_0116_PopulatingNextRightPointersInEachNode { |
118.杨辉三角
1 | 给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。 |
1 | public class Problem_0118_PascalTriangle { |
121.买卖股票的最佳时机
1 | 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 |
1 | public class Problem_0121_BestTimeToBuyAndSellStock { |
122.买卖股票的最佳时机II
1 | 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。 |
1 | public class Problem_0122_BestTimeToBuyAndSellStockII { |
123.买卖股票的最佳时机III
1 | 给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。 |
1 | public class Problem_0123_BestTimeToBuyAndSellStockIII { |
188.买卖股票的最佳时机IV
1 | 给定一个整数数组 prices ,它的第 i 个元素 prices[i] 是一支给定的股票在第 i 天的价格。 |
1 | public class Problem_0188_BestTimeToBuyAndSellStockIV { |
309.买卖股票的最佳时机V
1 | 给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 。 |
1 | public class Problem_0309_BestTimeToBuyAndSellStockWithCooldown { |
124.二叉树中的最大路径和
1 | 路径 被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列。该路径 至少包含一个 节点,且不一定经过根节点。 |
1 | public class Problem_0124_BinaryTreeMaximumPathSum { |
125.验证回文串
1 | 给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。 |
1 | public class Problem_0125_ValidPalindrome { |
127.单词接龙
1 | 字典 wordList 中从单词 beginWord 和 endWord 的 转换序列 是一个按下述规格形成的序列: |
1 | public class Problem_0127_WordLadder { |
128.最长连续序列
1 | 给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。 |
1 | public class Problem_0128_LongestConsecutiveSequence { |
130.被围绕的区域
1 | 给定一个二维的矩阵,包含 'X' 和 'O'(字母 O)。 |
1 | public class Problem_0130_SurroundedRegions { |
131.分割回文串
1 | 给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。 |
1 | public class Problem_0131_PalindromePartitioning { |
134.加油站
1 | 在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升。 |
1 | /* |
136.只出现一次的数字
1 | 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 |
1 | public class Problem_0136_SingleNumber { |
138.复制带随机指针的链表
1 | 给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点。 |
1 | public class Problem_0138_CopyListWithRandomPointer { |
139.单词拆分
1 | 给定一个非空字符串 s 和一个包含非空单词的列表 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。 |
1 | public class Problem_0139_WordBreak { |
140.单词拆分II
1 | 给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,在字符串中增加空格来构建一个句子,使得句子中所有的单词都在词典中。返回所有这些可能的句子。 |
1 | public class Problem_0140_WordBreakII { |
141.环形链表
1 | 给定一个链表,判断链表中是否有环。 |
1 | public class Problem_0141_LinkedListCycle { |
146.LRU缓存机制
1 | 运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制 。 |
1 | public class Problem_0146_LRUCache { |
最后更新: 2021年02月01日 17:52
原始链接: https://midkuro.gitee.io/2020/11/01/algorithm-topinterview/