![](https://img-blog.csdnimg.cn/78a2d723508f4c8682c0d339ea7af7da.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
大厂高频题
力扣刷题
slow is fast.
总结积累
展开
-
【美团一题】中位数
双指针:public class meituanText { public static void main(String[] args) {// int[] arr={1,2,3};// int n = arr.length; Scanner sc=new Scanner(System.in); int n=sc.nextInt(); int[] arr=new int[n]; for(int i=.原创 2022-03-26 19:56:35 · 434 阅读 · 0 评论 -
字节阿里高频50题:41. 缺失的第一个正数 440. 字典序的第K小数字(树的变体,经典)
/**解题思路:思路是剑指Offer的的3题:数组中重复的数字,最小正整数,也就是本来应该nums.length个个数 */class Solution { public int firstMissingPositive(int[] nums) { int n= nums.length; for(int i=0 ; i<n ; i++){ while(nums[i] > 0 && nums[i] <= .原创 2021-12-01 09:16:32 · 362 阅读 · 0 评论 -
字节阿里高频50题:135. 分发糖果 143. 重排链表(双指针,注意细节,因为返回值是void) 54. 螺旋矩阵 (细节处理)
/**解题思路:其实有一道类似题,在前100或者剑指offer里面,我们考虑两个数组,分别以左向右,以右向左规则的两个数组,然后找其中最大值 */class Solution { public int candy(int[] ratings) { int len = ratings.length; int res = 0; //返回值 //两个数组 int[] lft = new int[len]; int[] .原创 2021-11-30 09:34:00 · 472 阅读 · 2 评论 -
字节阿里高频50题:92. 反转链表 II 25. K 个一组翻转链表 (字符串)
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int val, ListNode next) { this.val = val; this.next = next; } * }.原创 2021-11-29 15:12:52 · 192 阅读 · 0 评论 -
字节高频50题:103. 二叉树的锯齿形层序遍历 199. 二叉树的右视图 (都是bfs) 93. 复原 IP 地址(回溯,dfs)
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { .原创 2021-11-29 13:42:59 · 1615 阅读 · 0 评论 -
阿里高频50题: 1278.分割回文串 III(背包问题,动态规划) 151. 反转字符串里的单词
dasd/**解题思想:动态规划、背包问题 */class Solution { public int palindromePartition(String s, int k) { //字符串长度 int length = s.length(); //dp[i][j]表示前i个字符分割成k个子串所需修改的最少字符数,初始值我们赋值尽可能大 int[][] dp = new int[length+1][k+1]; .原创 2021-11-27 10:06:44 · 510 阅读 · 0 评论 -
阿里高频50题: 13.罗马数学转整数 879. 盈利计划(背包问题,动态规划,很好)
das/**解题思路:常规思想就不说了,但是在评论中找到了很精妙的方法 */class Solution { public int romanToInt(String s) { //首先是把六种情况用别的字母代替 s = s.replace("IV","a"); s = s.replace("IX","b"); s = s.replace("XL","c"); s = s.replace("XC","d");原创 2021-11-26 10:58:45 · 293 阅读 · 0 评论 -
2021-06-07LC “阿里题库”148. 排序链表
//十大排序算法之一:归并排序,因为看到logn就想到二分法,但是一定要注意归并排序的一些细节,首先我们要将当前链表按中点进行分割//直到分割成一个节点然后分别排序再“合”//时间复杂度O(nlogn) 空间复杂度O(n)/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNo.原创 2021-06-07 08:09:30 · 228 阅读 · 1 评论 -
2021-06-06LC “阿里题库”88.合并两个有序数组 176. 第二高的薪水 322. 零钱兑换 69. x 的平方根
/*时间复杂度O(m+n) 空间复杂度O(m+n)*/class Solution { public void merge(int[] nums1, int m, int[] nums2, int n) { int[] nums1_2 = new int[m+n]; int p1= 0 , p2 =0 ,p=0; while(p1<m||p2<n){ if(p1==m){ n.原创 2021-06-06 09:11:03 · 207 阅读 · 0 评论 -
2021-06-05LC “阿里题库” 26. 删除有序数组中的重复项 176. 第二高的薪水136. 只出现一次的数字138. 复制带随机指针的链表
/* 直接上代码,双指针 不管相等不相等,每次循环q+1,但是p不一定+1,+1的前提是q,p+1对应的值不相等,那么p+1 时间复杂度O(n) 空间复杂度O(1)*/class Solution { public int removeDuplicates(int[] nums) { if(nums.length == 1) return 1; int p=0 , q=1; for(int i=1.原创 2021-06-05 09:10:46 · 221 阅读 · 0 评论 -
2021-06-04LC “阿里题库” 22. 括号生成 121买卖股票
/* 动态规划思想 我们求得就是最低价买入,最高价卖出 时间复杂度O(n) 空间复杂度O(1)*/public class Solution { public int maxProfit(int[] prices) { //最小的买入价格 int minPrice = Integer.MAX_VALUE; int maxProfit = 0; for(int val : prices){ .原创 2021-06-04 08:34:26 · 255 阅读 · 0 评论 -
2021-06-03LC “阿里题库” 50. Pow(x, n)今天一道,休息一下
/*首先要考虑n的大小,因为大小0和小于0是不同的结果首先我们要考虑x^2→x^4→9→x^19→x^38→x^77x→x^2→x^4→x^8→x^16→x^32→x^64时间复杂度O(logn) 空间复杂度O(logn) */class Solution { public double myPow(double x, int n) { long N = n; return N>=0 ? compete(x,N) : 1/compete(x,-...原创 2021-06-03 08:07:09 · 168 阅读 · 0 评论 -
2021-06-02LC “阿里题库” 415. 字符串相加 1115. 交替打印FooBar
/*计算和,我们可以通过直接通过字符串计算注意点1:我们在对应元素计算时,要注意讲ASCII码-'0';注意点2:看是否有进位,尤其最后一位注意点3: 字符串反转注意4:StringBuilder 创建 相当于包装类 String注意5:注意两个字符串可能不一样长,要注意下界时间复杂度O(max(m.n)) 空间复杂度O(1)*/class Solution { public String addStrings(String num1, String num2) { .原创 2021-06-02 08:27:01 · 224 阅读 · 0 评论 -
2021-06-01LC “阿里题库” 1411. 给 N x 3 网格图涂色的方案数 28. 实现 strStr()
/*动态规划 每一行 网格图的形式有两种 ABA ABC 既然用动态规划,就要考虑边界,和转移方程,我们通过dp[i][2]表示前i行一共两种形式,dp[i][0] 是ABA形式 dp[i][1]是ABC形式边界:i=0 dp[0][0]=6 (ABA形式6种) ,dp[0][1] = 6(ABC形式6种) 不管怎么变,一共也就这12种形式转移方程:dp[i][0]= 3*dp[i-1][0] + 2*dp[i-1][1] //通过前i-1层看第i层的ABA形式可以有几种 i>=1.原创 2021-06-01 08:40:19 · 172 阅读 · 0 评论 -
2021-05-31LC “阿里题库” 14. 最长公共前缀 19. 删除链表的倒数第 N 个结点
//两两比较,遍历字符串 ,时间复杂度O(字符串长度之和),空间复杂度O(1)class Solution { public String longestCommonPrefix(String[] strs) { if(strs.length == 0){ //空字符串 return ""; } String res = strs[0]; for(int i=1 ; i<strs.length;i++.原创 2021-05-31 08:42:47 · 189 阅读 · 0 评论 -
2021-05-30LC “阿里题库” 200.岛屿数量 1114.按序打印
/*--------------------------------------------------------------------------------------------------------------------------------------昨天考完试,可能2个小时坐风扇下面,吹的头疼,回宿舍躺着就在看大佬对网格型的dfs进行一个分析,今天自己整理一下首先想一下一个树的一个dfs遍历void tarverse(TreeNode root){ if(root =.原创 2021-05-30 10:06:37 · 225 阅读 · 0 评论 -
2021-05-29LC “阿里题库” 33. 搜索旋转排序数组 11. 盛最多水的容器 46. 全排列
/*因为要求时间复杂度为O(logn),空间复杂度O(1)因为我们可以直接想到二分查找法二分查找法就是找中间值,然后让目标值和中心值所在的元素值比较但是这个数组不是有序的,或许说部分有序的,一个数组分成两个有序的部分-------------------------------------------------------------------------------------------注意:二分查找的核心思想!!!!!!!!!!!!!!!!找中间值mid,然后和target比较,但是前.原创 2021-05-29 21:53:17 · 182 阅读 · 0 评论 -
2021-05-28LC “阿里题库” 64.最小路径和 215数组中的第K个最大元素
/*动态规划: 注意:m,n已经给了范围,所以不需要写grid.length==0.grid==null的情况因为用动态规划所以我们要考虑边界和转移方程,转移方程可以直接用grid[]代替,因为每次都是向下或者向右走所以只考虑上边界和左边界 dp[0][0] = grid[0][0],dp[0][j] = dp[0][j-1] + grid[0][j]左边界:dp[i][0]=dp[i-1][0] + grid[i][0]转移方程 dp[i][j] = Math.min(dp[i-1][j] ..原创 2021-05-28 07:57:48 · 163 阅读 · 0 评论 -
2021-05-27LC “阿里题库” 10.正则表达式匹配 56.合并区间
/*动态规划 时间复杂度O(mn) 空间复杂度(mn)q去匹配s,当两个一个为空,都是false,然后写边界dp[i][j]代表p的前j个字符匹配s的前s个边界:dp[0][j]匹配空字符串,只有x*x*X*X*这样的情况才是true转移方程:先考虑当前s.charAt(i-1)和p.charAt(j-1)相等的时候 dp[i][j]=dp[i-1][j-1] 这是相等的情况 (还有字符不相等的时候)字符不相等有三种情况:p.chgarAt(j-1)属于a~z,但是p.charAt.原创 2021-05-27 09:28:48 · 169 阅读 · 0 评论 -
2021-05-26LC “阿里题库” 344.反转字符串 175.组合两个表 141.环形链表 72.编辑距离
//将数组反转过来,然后返回 要求:空间复杂度O(1) 时间复杂度O(n)class Solution { public void reverseString(char[] s) { if(s == null || s.length < 2) return; int len = s.length; char temp; //遍历一般就好,len为奇数,则中间的不用变,为偶数,则正好 f.原创 2021-05-26 07:36:06 · 188 阅读 · 0 评论 -
2021-05-25 LeetCode “阿里巴巴企业题库” -------15. 三数之和 23. 合并K个升序链表 42. 接雨水
/*因为是三数之和,所以当1、“数组为空或者长度<3”直接返回,当满足这个条件我们再去下一步,因为找三树之和,我们可以先对2、“数组排序”3、最后“遍历,考虑的就是去重”的问题,因为我们将用一个for循环,[排序完了(优化:可以判断一下每次循环的第一个值是否大于0,如果大于0就没必要继续下去)],然后遍历数组,也就是三个数中的第一个为for循环中的数,然后第二个和第三个分别用指针L,R来表示,(降重:因为排序了,所以如果有重复的一定是相邻,所以我们此时可以判断是否相等。如果相等,就移动指针..原创 2021-05-25 09:05:40 · 260 阅读 · 1 评论 -
2021-05-24 LeetCode “阿里巴巴企业题库” -------53. 最大子序和 20.有效的括号815. 公交路线
//动态规划思想:时间复杂度O(n),空间复杂度O(1)class Solution { public int maxSubArray(int[] nums) { //我们可以通过动态规划思想去求解 int temp = 0; int maxNums = Integer.MIN_VALUE; for(int num: nums){ /*四种情况: 总之,就是如果当前连续和<.原创 2021-05-23 20:08:22 · 224 阅读 · 0 评论 -
2021-05-23 LeetCode “阿里巴巴企业题库” -------206. 反转链表 21. 合并两个有序链表 70. 爬楼梯
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int val, ListNode next) { this.val = val; this.next = next; } * }.原创 2021-05-23 12:19:05 · 209 阅读 · 0 评论 -
2021-05-22 LeetCode “阿里巴巴企业题库” -------9. 回文数 1411. 给 N x 3 网格图涂色的方案数
/*解题思路:我们通过回文子串的定义以及例子可以知道,当x<0 ,返回false 其余情况就是另外一道刚做的题了用的是第5题的方法时间复杂度O(n^2) ,空间复杂度O(n^2)但是明显浪费了,所以我们要剪枝*/class Solution { public boolean isPalindrome(int x) { if(x < 0) return false; /* if(x >= 0 ..原创 2021-05-22 12:10:29 · 270 阅读 · 0 评论 -
2021-05-21 LeetCode “阿里巴巴企业题库” -------7. 整数反转 8. 字符串转换整数 (atoi)
在这里插入代码片/*先通过long计算一下,但是在转换回int时我们要判断他们是否相等时间复杂度O(log|x|)(10为底) 空间复杂度O(1)*/class Solution { public int reverse(int x) { long n=0; while(x!=0){ n = x%10 + n*10; x = x/10; } return (int)n==n? (.原创 2021-05-21 10:48:10 · 196 阅读 · 0 评论 -
2021-05-20 LeetCode “阿里巴巴企业题库” -------5. 最长回文子串、146. LRU 缓存机制
/*思路:(动态规划)首先我们考虑的是动态规划,其实一个回文子串,那么去了它的首尾段也是回文子串,所以我们分成一个一个小问题,比如说“一个字母”一定是回文子串,如果他的首尾是相同的字母那么他也是一个回文子串,以此类推,因此我们去找动态规划的状态转移方程以及边界条件状态转移方程: 当Si==Sj 时S(i,j) = S(i+1,j-1) ,(j-i>=2)并且边界条件:长度为1时,也就是说dp[i][j] 指的是i到J是否是回文子串,最后我们返回最大的值一定是一个回文子串,2时,两个值相.原创 2021-05-20 22:54:41 · 199 阅读 · 2 评论