LeetCode热题Hot100
精选 100 道力扣(LeetCode)上最热门的题目,适合初识算法与数据结构的新手和想要在短时间内高效提升的人,熟练掌握这 100 道题,你就已经具备了在代码世界通行的基本能力。
小样x
硕士毕业已工作,论文指导、定制开发、课程设计指导、系统部署、项目讲解等均可私信或私信留联系方式,用心指导
展开
-
LeetCode Hot 100 --- 旋转数组(java)
题目解析辅助数组解法,暂时能想到这个太菜matrix_new[j][n-1-i] = matrix[i][j]表示第i行,复制到辅助数组的第j列,可以总结出这个表达式class Solution { public void rotate(int[][] matrix) { //矩阵旋转[辅助数组时间复杂度O(n2),O(n2)] //核心:matrix_new[j][n-1-i] = matrix[i][j],n=matrix.length原创 2021-09-08 19:42:03 · 126 阅读 · 0 评论 -
LeetCode Hot 100 --- 全排列(java)
题目解析与代码对于题目要求得出所有可行解问题(就是问你有多少种),就要想到回溯法解析:LeetCode大佬详细解析,确实十分透彻,我觉得下面这些讲的非常到位,值传递问题,我以前也碰到回溯还纳闷为啥要new ArrayList<>(path);,现在明白了class Solution { public List<List<Integer>> permute(int[] nums) { //全排列:求所有可行解问题,用回溯原创 2021-09-07 20:29:38 · 190 阅读 · 0 评论 -
LeetCode Hot 100 --- 在排序数组中查找元素的第一个和最后一个位置(java)
题目解析(查找问题用二分法yyds)由于数组已经排序,因此整个数组是单调递增的,我们可以利用二分法来加速查找的过程。考虑 target 开始和结束位置,其实我们要找的就是数组中第一个>=target 的位置(记为 leftIdx)和第一个>target 的位置减一(记为rightIdx),如nums = [5,7,7,8,8,10],target = 8,下标leftIdx=3,rightIdx=5-1=4。为了代码的复用,我们定义 binarySearch(nums, target,原创 2021-09-06 21:56:43 · 176 阅读 · 0 评论 -
LeetCode Hot 100 --- 最长有效括号(java详细注解)
题目代码class Solution { public int longestValidParentheses(String s) { //注意题目中一个条件就是连续,遍历中间括号可能会变得不连续 //如( ( ) ) ) (,第5个)使得无法形成连续括号,连续括号数就要中断重新计算括号长度 //又如) ( ) ( ),第一个)使得直接无法形成括号,就直接重新计算括号长度 //双指针,从左往右遍历一次,再从右往左遍历一次,分别记录原创 2021-09-05 21:26:30 · 203 阅读 · 0 评论 -
LeetCode Hot 100 --- 下一个排列(java图解超级详细)
题目分析先理解一下题目,下一个排列什么意思123,132,213,231,312,321class Solution { public void nextPermutation(int[] nums) { int len = nums.length; for (int i = len - 1; i > 0; i--) { //从后往前先找出第一个相邻的后一个大于前一个情况,此时的i-1位置就是需要交换的位置原创 2021-09-05 20:39:16 · 611 阅读 · 1 评论 -
LeetCode Hot 100 --- 括号生成(java图解超级详细)
题目代码class Solution { //回溯法(递归+剪枝) public List<String> generateParenthesis(int n) { //题中已经说明1<=n<=8 List<String> res = new ArrayList<>(); String s = ""; getResult(n,n,s,res);//n,n表示左右括号的初始数量原创 2021-09-04 20:36:20 · 237 阅读 · 0 评论 -
LeetCode Hot 100 --- 电话号码的字母组合(java图解)
题目解析如下图,这个图网上找的,很直观以"23"为例1、首先list.add(""),然后遍历"23",第一个2对应"abc",list.remove(0)=""=temp,和"abc"中逐个字母拼接,[“a”,“b”,“c”]2、然后接着,遍历3,对应"def",[“a”,“b”,“c”]remove(0)出来"a"和"def"逐个拼接,得到[“b”,“c”,“ad”,“ae”,“af”],接下来就是"b"和"c"拿出来逐个和"def"拼接即可class Solution { pu原创 2021-09-03 19:41:26 · 158 阅读 · 0 评论 -
LeetCode Hot 100 --- 三数之和 (java详解)
题目代码用的是双指针,双指针在需要遍历的情况下经常被使用,且效率不错,下面代码做了详细注释class Solution { public List<List<Integer>> threeSum(int[] nums) { List<List<Integer>> res = new ArrayList<>(); if(nums.length < 3){ return re原创 2021-09-03 17:01:44 · 175 阅读 · 0 评论 -
LeetCode Hot 100 --- 盛最多水的容器 (java)
题目有一道相似题,可以看看,相似扩展:接雨水问题解析与代码这道题最容易想到的是暴力破解,两个遍历,但是这复杂度太高,当数组元素非常多时,运行时间就太长,所以根据接雨水问题的启发,可以用双指针法for(int i = 0 ; i < len - 1 ; i++){ for(int j = i + 1 ; j < len ; j++){ //write code }}双指针法class Solution { public int maxArea(int[] heig原创 2021-09-03 15:53:35 · 164 阅读 · 0 评论 -
LeetCode Hot 100 --- 寻找两个正序数组的中位数(java详解)
题目解法一时间复杂度:O(m+n)空间复杂度:O(m+n)这个也是我自己想出来的解法,不过确实最慢解。。。代码注释也比较详细class Solution { public double findMedianSortedArrays(int[] nums1, int[] nums2) { //首先,对两个数组进行合并 //判空 if(nums1 == null || nums1.length == 0){ //获取数组原创 2021-09-02 16:41:47 · 188 阅读 · 0 评论 -
LeetCode Hot 100 --- 无重复字符的最长子串(java)
题目代码class Solution { public int lengthOfLongestSubstring(String s) { //注意它示例中的子串和子序列区别:子串是连续子串 int length = s.length(); int res = 0; //key->字符,value->字符对应索引 Map<Character, Integer> map = new HashMa原创 2021-09-01 17:38:22 · 154 阅读 · 0 评论 -
LeetCode Hot 100 --- 两数相加(java)
题目代码这题与之前写过的牛客Top200—链表相加,十分相似,只不过一个往右进位,一个往左进位class Solution { public ListNode addTwoNumbers(ListNode l1, ListNode l2) { int carry = 0; ListNode head = new ListNode(-1);//头结点 ListNode cur = head; while(l1 != null ||原创 2021-09-01 16:50:21 · 130 阅读 · 0 评论 -
LeetCode Hot 100 --- 两数之和(java)
题目最优解法:一遍哈希最容易想到是暴力破解,两个循环,但时间复杂度O(n2),比较高,这里用HashMap,时间复杂度O(n),空间复杂度O(n)之前牛客刷过同样的 两数之和,要求返回索引不一样而已class Solution { public int[] twoSum(int[] nums, int target) { Map<Integer,Integer> map = new HashMap<>(); for(int i = 0原创 2021-09-01 16:39:55 · 151 阅读 · 0 评论