当前位置:   article > 正文

LeetCode中的那些题_string [] tempnum; list tempnums = new ar

string [] tempnum; list tempnums = new arraylist<>; tempnu

目录

1. 两数之和

2. 两数相加

3. 无重复字符的最长子串

*******4.寻找两个有序数组的中位数(官方解答) :

5.最长回文子串(官方解答)

15. 三数之和

16. 最接近的三数之和

17.电话号码的字母组合

解题

18.四数之和

19.删除链表的倒数第N个节点(官方解答)

20.有效的括号(官方解答)

21. 合并两个有序链表

24. 两两交换链表中的节点

25. k个一组翻转链表

26. 删除排序数组中的重复项

49. 字母异位词分组

62.不同路径

70.爬楼梯

75. 颜色分类

198.打家劫舍


LeetCode 1- 100

 

1. 两数之和

: https://blog.csdn.net/love905661433/article/details/84779586

  1. int* twoSum(int* nums, int numsSize, int target) {
  2. int * b =(int*)malloc(2 * sizeof(int));
  3. for(int i =0 ;i<numsSize ; i++){
  4. for(int j = 1 ;j<numsSize ;j++){
  5. if((i!=j) && (nums[i]+nums[j]==target)){
  6. b[0]=i;b[1]=j;
  7. return b;
  8. }
  9. }
  10. }
  11. return b;
  12. }

测试用例:

1、

3,2,3   6  ,易错:应该先判断是否有,再添加元素

3,2,4    6  易错:应该判断这两个数的下标是否一样

  1. class Solution {
  2. public int[] twoSum(int[] nums, int target) {
  3. int [] res = {0,1};
  4. HashMap<Integer, Integer> map = new HashMap<Integer , Integer>();
  5. int len = nums.length;
  6. int t = 0;
  7. for(int i = 0;i<len ;i++){
  8. t = target-nums[i];
  9. if(map.containsKey(t) && i != (map.get(t))){
  10. res[0] = map.get(t);
  11. res[1] = i;
  12. return res;
  13. }
  14. map.put(nums[i],i);
  15. }
  16. return res;
  17. }
  18. }

分析:一定要考虑测试用例

注意:hashmap的用法。

数组的长度是:nums.length

判断hashmap中是否存在该元素:map.containsKey(key);  map.containsValue(v);

想获得某个key对应的value:map.get(k);

hashmap的添加是用put,不是add

 

2. 两数相加

: https://blog.csdn.net/love905661433/article/details/84842140

分析思路:链表最容易错的地方就是:两个链表合并的时候,不能让t1=t2,而是让t1的前一个next = t2.

两数相加,注意进位,最后也有可能会进位

  1. /**
  2. * Definition for singly-linked list.
  3. * public class ListNode {
  4. * int val;
  5. * ListNode next;
  6. * ListNode(int x) { val = x; }
  7. * }
  8. */
  9. class Solution {
  10. public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
  11. ListNode t1 = l1;
  12. ListNode t2 = l2;
  13. ListNode qian1 = l1;
  14. int f = 0;
  15. while(t1 != null && t2!= null){
  16. t1.val =t1.val + t2.val + f ;
  17. f = t1.val/10;
  18. t1.val = t1.val % 10;
  19. qian1 = t1;
  20. t1 = t1.next;
  21. t2 = t2.next;
  22. }
  23. if(t2 != null){
  24. qian1.next = t2;
  25. t1 = t2;
  26. }
  27. while(t1 != null){
  28. t1.val = t1.val + f;
  29. f = t1.val/10;
  30. t1.val = t1.val % 10;
  31. qian1 = t1;
  32. t1 = t1.next;
  33. }
  34. if(f == 1){
  35. qian1.next = new ListNode(1);
  36. qian1.next.next = null;
  37. }
  38. return l1;
  39. }
  40. }

3. 无重复字符的最长子串

: https://blog.csdn.net/love905661433/article/details/84640527

自己的博客:https://blog.csdn.net/qq_39474604/article/details/90674749

双指针做法

  1. class Solution {
  2. public static int lengthOfLongestSubstring(String s) {
  3. if(s.length() == 0) return 0;
  4. if(s.length() == 1) return 1;
  5. int len = 0;
  6. int qian = 0;
  7. int hou = 0;
  8. int [] map = new int[257];
  9. while(hou<s.length()){
  10. map[s.charAt(hou)]++;
  11. if(map[s.charAt(hou)] > 1){
  12. //一定是前面有重复的了,需要让qian往后移动
  13. while(map[s.charAt(qian)]==1){
  14. map[s.charAt(qian)]--;
  15. qian++;
  16. }
  17. map[s.charAt(qian)]--;
  18. qian++;
  19. hou++;
  20. }else {
  21. //没有重复,就让hou往后移动,然后len改变一下
  22. hou++;
  23. len = Math.max(len , hou-qian);
  24. }
  25. }
  26. return len ;
  27. }
  28. }

思路 1:

把每个字母当成回文串的中心

这里要考虑两种情况,回文串的长度为奇数或者偶数情况。

思路 2: 把每个字母当成回文串的结束

思路 3: 动态规划

dp[j][i] 表示字符串从 j 到 i 是否是为回文串,即当 s[j] == s[i] 如果 dp[j+1][i-1] 也是回文串,那么字符串从 j 到 i 也是回文串,即 dp[j][i] 为真。

作者:powcai
链接:https://leetcode-cn.com/problems/two-sum/solution/duo-chong-si-lu-qiu-jie-by-powcai/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

*******4.寻找两个有序数组的中位数(官方解答) :

https://leetcode-cn.com/problems/median-of-two-sorted-arrays/solution/

  1. class Solution {
  2. public double findMedianSortedArrays(int[] nums1, int[] nums2) {
  3. int len1 = nums1.length;
  4. int len2 = nums2.length;
  5. int [] all = new int[len1+len2];
  6. //边界
  7. if(len1 == 0 && len2 == 0) return 0.0;
  8. int i1 = 0;
  9. int i2 = 0;
  10. int c = 0;
  11. double t = 0;
  12. while(i1 < len1 && i2<len2){
  13. if(nums1[i1]<nums2[i2]){
  14. all[c] = nums1[i1];
  15. i1++;
  16. c++;
  17. }else if(nums1[i1]>nums2[i2]){
  18. all[c] = nums2[i2];
  19. i2++;
  20. c++;
  21. }else{
  22. all[c] = nums1[i1];
  23. i1++;
  24. c++;
  25. all[c] = nums2[i2];
  26. i2++;
  27. c++;
  28. }
  29. }
  30. while(i1<len1){
  31. all[c++] = nums1[i1++];
  32. }
  33. while(i2<len2){
  34. all[c++] = nums2[i2++];
  35. }
  36. if((len1+len2)%2 == 0){
  37. return (all[(len1+len2)/2-1]+all[(len1+len2)/2])/2.0;
  38. }
  39. return (double)all[(len1+len2)/2];
  40. }
  41. }

5.最长回文子串(官方解答)

: https://leetcode-cn.com/problems/longest-palindromic-substring/solution/

思路1:每个元素都遍历看是否:以该元素为中心的回文,O(n*2*n),而且还是以两种方式的:aba,bb

暴力求解,列举所有的子串,判断是否为回文串,保存最长的回文串。

  1. class Solution {
  2. public String longestPalindrome(String s) {
  3. if(s.length() == 0) return s;
  4. int res = 0;
  5. int tou_max = 0;
  6. int wei_max = 0;
  7. int sum = 1;
  8. int left = 0 ;
  9. int right = 0;
  10. for(int i = 0 ;i<s.length() ;i++){
  11. //这个适合:aba,所以sum = 1
  12. sum = 1;
  13. left = i -1 ;
  14. right = i+1;
  15. while(left >= 0 && right <s.length()){
  16. if(s.charAt(left) == s.charAt(right)){
  17. sum +=2 ;//注意每次都是加2
  18. left--;
  19. right ++ ;
  20. }
  21. else break;
  22. }
  23. if(sum > res){
  24. tou_max = left +1;
  25. wei_max = right-1;
  26. res = sum;
  27. }
  28. //这里适合:bb,所以sum=0
  29. sum = 0;
  30. left = i ;
  31. right = i+1;
  32. while(left >= 0 && right <s.length()){
  33. if(s.charAt(left) == s.charAt(right)){
  34. sum += 2;
  35. left--;
  36. right ++ ;
  37. }
  38. else break;
  39. }
  40. if(sum > res){
  41. tou_max = left +1;
  42. wei_max = right-1;
  43. res = sum;
  44. }
  45. }
  46. return s.substring(tou_max, wei_max+1);
  47. //这个substring(2,4);取s的子字符串,从下标为2的元素开始取,到4-1 = 下标为3的元素为止
  48. }
  49. }

改进版本:

 

 

6.Z 字形变换(官方解答) : https://leetcode-cn.com/problems/zigzag-conversion/solution/

7.整数反转(官方解答) : https://leetcode-cn.com/problems/reverse-integer/solution/

 

8.字符串转换整数 (atoi) :

9.回文数(官方解答) : https://leetcode-cn.com/problems/palindrome-number/solution/

10.正则表达式匹配 :

11. 盛最多水的容器 : https://blog.csdn.net/love905661433/article/details/84137187

  1. class Solution {
  2. public int maxArea(int[] height) {
  3. int max_height = 0;
  4. //找到最高的柱子,也就是线最高的位置,线从下往上移动
  5. for(int i = 0;i<height.length;i++){
  6. if(height[i]>max_height) max_height = height[i];
  7. }
  8. //线从下往上移动
  9. int output = 0;
  10. for(int xian = 1; xian<=max_height ;xian++){
  11. int output_i = 0;
  12. //从前往后 找到第一个>=i的柱子,并标记位置
  13. int qian_i = 0;
  14. for(int i = 0 ;i<height.length;i++){
  15. if(height[i] >= xian){ qian_i = i; break; }
  16. }
  17. //从后往前,找到第一个>=i的柱子,并标记位置
  18. int hou_i = 0;
  19. for(int i = height.length-1;i>=0;i--){
  20. if(height[i]>= xian){ hou_i = i;break; }
  21. }
  22. //计算该水平线的情况下的水容量
  23. output_i = (hou_i - qian_i)*xian;
  24. if(output_i>output) output = output_i;
  25. }
  26. return output;
  27. }
  28. }

12.整数转罗马数字 :

13.罗马数字转整数 :

14.最长公共前缀 :

15. 三数之和

: https://blog.csdn.net/love905661433/article/details/84779700

  1. class Solution {
  2. public List<List<Integer>> threeSum(int[] nums) {
  3. //先排个序
  4. Arrays.sort(nums);
  5. List<List<Integer>> list = new ArrayList<List<Integer>>();
  6. for(int i = 0 ;i<nums.length;i++){
  7. int start = i+1;
  8. int end = nums.length-1;
  9. while(start < end){
  10. //if( end == i ) continue;//首先三个数不能重复
  11. int sum = nums[i]+nums[start]+nums[end];
  12. if(sum == 0){
  13. List<Integer> temp = new ArrayList();
  14. temp.add(nums[i]);
  15. temp.add(nums[start]);
  16. temp.add(nums[end]);
  17. list.add(temp);
  18. int t = nums[start];
  19. while(start < end && nums[start]==t) start++;
  20. t= nums[end];
  21. while(start < end && nums[end]==t) end--;
  22. }else if(sum <0) start++;
  23. else end--;
  24. }
  25. int t = nums[i];
  26. while(i<nums.length && nums[i]==t) i++;
  27. i--;
  28. }
  29. return list;
  30. }
  31. //[-4,-2,-2,-2,0,1,2,2,2,3,3,4,4,6,6]
  32. }

16. 最接近的三数之和

: https://blog.csdn.net/love905661433/article/details/84779915

  • 先排序, 后计算
  • 双指针, 滑动窗口
  1. class Solution {
  2. public int threeSumClosest(int[] nums, int target) {
  3. Arrays.sort(nums);
  4. int res = nums[0]+nums[1]+nums[2];
  5. int sum = 0;
  6. for(int i = 0;i<nums.length-2;i++){
  7. int start = i+1;
  8. int end = nums.length-1;
  9. while(start<end){
  10. sum = nums[i]+nums[start]+nums[end];
  11. if(((sum-target)*(sum-target)) < ((res-target)*(res-target))){
  12. res = sum;
  13. }
  14. if(sum < target) start++;
  15. else if(sum > target) end--;
  16. else return target;
  17. }
  18. }
  19. return res;
  20. }
  21. }

17.电话号码的字母组合

: https://blog.csdn.net/love905661433/article/details/85063007

题目:

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。

给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。

å¨è¿éæå¥å¾çæè¿°

示例:

  1. 输入:"23"
  2. 输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].

说明:
尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。

解题

  • 字典 + 递归 + 回溯

自己做的:

思路:从前往后遍历digits, 每一次的字符串的数组都是在上一个的改进下做的

  1. class Solution {
  2. private static char[][] num_char = new char[][]{
  3. null,
  4. null,
  5. {'a','b','c'},
  6. {'d','e','f'},
  7. {'g','h','i'},
  8. {'j','k','l'},
  9. {'m','n','o'},
  10. {'p','q','r','s'},
  11. {'t','u','v'},
  12. {'w','x','y','z'}
  13. };
  14. public List<String> letterCombinations(String digits) {
  15. List<String> res = new ArrayList<String>();
  16. if(digits.length() == 0) return res;
  17. int [] num = new int[digits.length()];
  18. for(int i = 0;i<digits.length();i++){
  19. num[i] = digits.charAt(i)-'0';
  20. }
  21. int hang = num[0];
  22. for(int j = 0 ;j<num_char[hang].length;j++){
  23. String str = ""+num_char[hang][j];
  24. res.add(str);
  25. }
  26. res = func(num , 1, res );
  27. return res;
  28. }
  29. public List<String> func(int[] num, int i , List<String> yuan){
  30. if(i>num.length-1) return yuan;
  31. List<String> res = new ArrayList<String>();
  32. int hang = num[i];
  33. Iterator<String> iter = yuan.iterator();
  34. while (iter.hasNext()) {
  35. String s = (String) iter.next();
  36. for(int j = 0;j<num_char[hang].length;j++){
  37. String st = s+num_char[hang][j];
  38. res.add(st);
  39. }
  40. }
  41. res = func(num , i+1 , res);
  42. return res;
  43. }
  44. }

结果:

执行用时 :2 ms, 在所有 Java 提交中击败了74.12%的用户

内存消耗 :35.9 MB, 在所有 Java 提交中击败了73.90%的用户

 

18.四数之和

: https://blog.csdn.net/love905661433/article/details/84779785

超时:里面,为了防止重复发生,加了continue;

  1. class Solution {
  2. public List<List<Integer>> fourSum(int[] nums, int target) {
  3. Arrays.sort(nums);
  4. List<List<Integer>> res = new ArrayList<>();
  5. for(int i = 0 ;i<nums.length;i++){
  6. if(i>0 && nums[i]==nums[i-1]) continue;
  7. for(int j = i+1;j<nums.length;j++){
  8. if(j>i+1 && nums[j]==nums[j-1]) continue;
  9. for(int k = j+1; k<nums.length ; k++){
  10. if(k>j+1 && nums[k]==nums[k-1]) continue;
  11. for(int r = k+1;r<nums.length ; r++){
  12. if(r>k+1 && nums[r]==nums[r-1]) continue;
  13. int sum = nums[i]+nums[j]+nums[k]+nums[r];
  14. if(sum == target){
  15. List<Integer> t = new ArrayList<Integer>();
  16. t.add(nums[i]);
  17. t.add(nums[j]);
  18. t.add(nums[k]);
  19. t.add(nums[r]);
  20. res.add(t);
  21. }
  22. }
  23. }
  24. }
  25. }
  26. return res;
  27. }
  28. }

改进:

一开始自己这样写,一直出错,参考:https://blog.csdn.net/weixin_43111966/article/details/82495887

  1. class Solution {
  2. public List<List<Integer>> fourSum(int[] nums, int target) {
  3. Arrays.sort(nums);
  4. List<List<Integer>> res = new ArrayList<>();
  5. for(int i = 0 ;i<=nums.length-3;i++){
  6. if(i>0 && nums[i]==nums[i-1]) continue;
  7. for(int j = i+1;j<=nums.length-2;j++){
  8. if(j>i+1 && nums[j]==nums[j-1]) continue;
  9. //固定两个数,然后双指针做法
  10. //if((target - nums[i]-nums[j]) < nums[j+1]) break;//剪枝:这样的情况不存在解
  11. //这里剪枝填上就出错。。。。。。。。。无语,咋会错呢
  12. //另外:让target = target-nums[i]-nums[j],就出错。。。。。。
  13. int qian = j+1 ;
  14. int hou = nums.length - 1;
  15. while(qian < hou){
  16. int sum =nums[i]+nums[j]+ nums[qian]+nums[hou];
  17. if(sum >target ) hou--;
  18. else if(sum < target) qian++;
  19. else{
  20. //加入结果中
  21. List<Integer> t = new ArrayList<Integer>();
  22. t.add(nums[i]);
  23. t.add(nums[j]);
  24. t.add(nums[qian]);
  25. t.add(nums[hou]);
  26. res.add(t);
  27. hou--;
  28. qian++;
  29. //去重
  30. while(qian<hou && nums[hou]==nums[hou+1]) hou--;
  31. while(qian<hou && nums[qian]==nums[qian-1]) qian++;
  32. }
  33. }
  34. }
  35. }
  36. return res;
  37. }
  38. }

 

 

 

 

19.删除链表的倒数第N个节点(官方解答)

: https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list/solution/

自己做的:

  1. /**
  2. * Definition for singly-linked list.
  3. * public class ListNode {
  4. * int val;
  5. * ListNode next;
  6. * ListNode(int x) { val = x; }
  7. * }
  8. */
  9. class Solution {
  10. public ListNode removeNthFromEnd(ListNode head, int n) {
  11. //找到链表的倒数第n+1个节点
  12. int new_n = n+1;
  13. //添加一个头结点,好计算
  14. ListNode tou = new ListNode(0);
  15. tou.next = head;
  16. head = tou;
  17. //寻找节点
  18. ListNode fast = head;
  19. ListNode slow = head;
  20. for(int i = 0;i<new_n;i++) fast = fast.next;
  21. while(fast != null){
  22. slow = slow.next;
  23. fast = fast.next;
  24. }
  25. slow.next = slow.next.next;
  26. head = head.next;
  27. return head;
  28. }
  29. }

20.有效的括号(官方解答)

: https://leetcode-cn.com/problems/valid-parentheses/solution/

  1. class Solution {
  2. public boolean isValid(String s) {
  3. char [] kuoHaoMen = s.toCharArray();
  4. Stack<Character> st = new Stack<Character>();
  5. int i = 0;
  6. while(i<kuoHaoMen.length){
  7. if(st.isEmpty()){
  8. st.push(kuoHaoMen[i]);
  9. }else{
  10. char a = st.peek();
  11. char b = kuoHaoMen[i];
  12. if((a=='(' && b==')')||(a=='[' && b==']')||(a=='{'&&b=='}')){
  13. st.pop();
  14. }else{
  15. st.push(kuoHaoMen[i]);
  16. }
  17. }
  18. i++;
  19. }
  20. if(st.isEmpty()){
  21. return true;
  22. }
  23. return false;
  24. }
  25. }

21. 合并两个有序链表

: https://blog.csdn.net/love905661433/article/details/84842342

22.括号生成(官方解答) : https://leetcode-cn.com/problems/generate-parentheses/solution/

自己做的:

执行用时 :3 ms, 在所有 Java 提交中击败了84.36%的用户

内存消耗 :38 MB, 在所有 Java 提交中击败了60.30%的用户

  1. class Solution {
  2. public List<String> generateParenthesis(int n) {
  3. List<String> res = new ArrayList<String>();
  4. func(n-1,n,"(",res);
  5. return res;
  6. }
  7. public void func(int qian , int hou , String str,List<String> res){
  8. if(qian == 0){
  9. //只有一种结果了,可以输出了
  10. for(int i = 0;i<hou;i++) str+=")";
  11. res.add(str);
  12. return ;
  13. }
  14. if(qian == hou){
  15. //只能是qian括号
  16. func(qian-1,hou,str +"(",res);
  17. }else{
  18. //可以是qian括号
  19. func(qian-1,hou,str +"(",res);
  20. //可以是hou括号
  21. func(qian,hou-1,str +")",res);
  22. }
  23. }
  24. }

23.合并K个排序链表 :

24. 两两交换链表中的节点

: https://blog.csdn.net/love905661433/article/details/84842520

自己做的:

执行用时 :1 ms, 在所有 Java 提交中击败了82.92%的用户

内存消耗 :35.1 MB, 在所有 Java 提交中击败了66.82%的用户

题目描述:

给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。

你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

示例:

给定 1->2->3->4, 你应该返回 2->1->4->3.

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/swap-nodes-in-pairs
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

  1. /**
  2. * Definition for singly-linked list.
  3. * public class ListNode {
  4. * int val;
  5. * ListNode next;
  6. * ListNode(int x) { val = x; }
  7. * }
  8. */
  9. class Solution {
  10. public ListNode swapPairs(ListNode head) {
  11. //边界问题
  12. if(head == null){
  13. return head;
  14. }
  15. //加一个头结点,便于处理
  16. ListNode tou = new ListNode(0);
  17. tou.next = head;
  18. head = tou;
  19. ListNode qian = head.next;
  20. ListNode hou = qian.next;
  21. ListNode p = head;
  22. while(qian != null && hou != null){
  23. qian.next = hou.next;
  24. hou.next = qian;
  25. p.next = hou;
  26. p = qian;
  27. qian = p.next ;
  28. if(qian != null) hou = qian.next;
  29. }
  30. head = head.next;
  31. return head;
  32. }
  33. }

25. k个一组翻转链表

: https://blog.csdn.net/love905661433/article/details/84930637

下面这个做法:最后不足k,也会翻转

  1. class Solution {
  2. public ListNode reverseKGroup(ListNode head, int k) {
  3. if(head == null || head.next == null) return head;
  4. int c = 1;
  5. ListNode p_qian = head;
  6. ListNode p = head.next;
  7. ListNode next_p = p.next;
  8. while(c<k){
  9. p_qian.next = next_p;
  10. p.next = head;
  11. head = p;
  12. c++;
  13. p = next_p;
  14. if(p == null) return head;
  15. next_p = p.next;
  16. }
  17. if(c==k && p!= null) p_qian.next = reverseKGroup(p , k);
  18. ListNode t = head;
  19. return head;
  20. }
  21. }

正确的:

  1. /**
  2. * Definition for singly-linked list.
  3. * public class ListNode {
  4. * int val;
  5. * ListNode next;
  6. * ListNode(int x) { val = x; }
  7. * }
  8. */
  9. class Solution {
  10. public ListNode reverseKGroup(ListNode head, int k) {
  11. if(head == null || head.next == null) return head;
  12. int c = 0;
  13. ListNode p_qian = head;
  14. ListNode p = head.next;
  15. ListNode next_p = p.next;
  16. //判断是否有k个数:开始
  17. ListNode tt = head;
  18. while(tt!= null && c<k){
  19. c++;
  20. tt = tt.next;
  21. }
  22. if(c<k) return head;
  23. //判断是否有k个数:结束
  24. c = 1;
  25. while(c<k){
  26. p_qian.next = next_p;
  27. p.next = head;
  28. head = p;
  29. c++;
  30. p = next_p;
  31. if(p == null) return head;
  32. next_p = p.next;
  33. }
  34. if(c==k && p!= null) p_qian.next = reverseKGroup(p , k);
  35. ListNode t = head;
  36. return head;
  37. }
  38. }

26. 删除排序数组中的重复项

: https://blog.csdn.net/love905661433/article/details/84640011

结果:时间faster than 98.17%,空间less than 99.97%

  1. class Solution {
  2. public int removeDuplicates(int[] nums) {
  3. //注意本题不只是返回长度,而是真的要改变数组中的内容
  4. int len = nums.length;
  5. if(len == 0) return 0;
  6. if(len == 1) return 1;
  7. int last_i = 0;
  8. int count = 1;
  9. for(int i = 1; i<len ;i++){
  10. if(nums[last_i] != nums[i]){
  11. last_i = i;
  12. nums[count] = nums[i];//这里真的改变数组的内容
  13. count ++;
  14. }
  15. }
  16. return count;
  17. }
  18. }

27. 移除元素 : https://blog.csdn.net/love905661433/article/details/83619231

  • 对整个数组进行一次快速排序中的partition操作即可, 将数组分为等于val和不等于val的两部分

28.实现strStr() :

29.两数相除 :

30.与所有单词相关联的字串 :

31.下一个排列(官方解答) : https://leetcode-cn.com/problems/next-permutation/solution/

32.最长有效括号 :

33.搜索旋转排序数组 :

34.在排序数组中查找元素的第一个和最后一个位置 :

35. 搜索插入位置 : https://blog.csdn.net/love905661433/article/details/84061132

二分法

36.有效的数独 :

37.解数独 :

38.报数 :

39.组合总和 : https://blog.csdn.net/love905661433/article/details/85250243

1、递归 + 回溯;2、注意重复解问题

40.组合总和 II : https://blog.csdn.net/love905661433/article/details/85250391

1、先排序;2、递归 + 回溯;3、注意重复解问题

41.缺失的第一个正数 :

42.接雨水 :

43.字符串相乘 :

44.通配符匹配 :

45.跳跃游戏 II :

46.全排列 : https://blog.csdn.net/love905661433/article/details/85156115

47.全排列 II : https://blog.csdn.net/love905661433/article/details/85156116

48.旋转图像 :

49. 字母异位词分组

: https://blog.csdn.net/love905661433/article/details/84797348

自己的博客:https://blog.csdn.net/qq_39474604/article/details/90673556

  1. public class Main {
  2. public static void main(String[] args) {
  3. String[] strs= {"eat", "tea", "tan", "ate", "nat", "bat"};
  4. List<List<String>> res = groupAnagrams(strs);
  5. for(List<String> ress: res){
  6. for(String string : ress){
  7. System.out.print(string+" ");
  8. }
  9. System.out.println(" ");
  10. }
  11. }
  12. public static List<List<String>> groupAnagrams(String[] strs){
  13. Map<String, List<String>> map = new HashMap<String, List<String>>();
  14. for(String str :strs){
  15. char [] chars = str.toCharArray();
  16. Arrays.sort(chars);
  17. String key = new String(chars);
  18. if(map.containsKey(key)){
  19. List<String> group = map.get(key);
  20. group.add(str);
  21. }else {
  22. List<String> newGroup = new ArrayList<String>();
  23. newGroup.add(str);
  24. map.put(key,newGroup);
  25. }
  26. }
  27. return new ArrayList<List<String>>(map.values());
  28. }
  29. }

50.Pow(x, n) :

51.N皇后 :

52.N皇后 II :

53. 最大子序和 : https://blog.csdn.net/love905661433/article/details/84797550

双指针做法

54.螺旋矩阵 :

55.跳跃游戏 :

56.合并区间 :

57.插入区间 :

58.最后一个单词的长度 :

59.螺旋矩阵 II :

60.第k个排列 :

61. 旋转链表 : https://blog.csdn.net/love905661433/article/details/84931256

62.不同路径

: https://blog.csdn.net/love905661433/article/details/86258220

  1. public class Main {
  2. public static void main(String[] args) {
  3. int m = 7;
  4. int n = 3;
  5. int [][] res = new int[n][m];
  6. res[0][0] = 1;
  7. for(int i = 0 ; i<n;i++){
  8. for(int j = 0;j<m;j++){
  9. if(i==0 || j==0) res[i][j] = 1;
  10. else {
  11. res[i][j] = res[i-1][j]+res[i][j-1];
  12. }
  13. }
  14. }
  15. System.out.println(res[n-1][m-1]);
  16. }
  17. }

63.不同路径 II : https://blog.csdn.net/love905661433/article/details/86258419

64.最小路径和 : https://blog.csdn.net/love905661433/article/details/85857221

65.有效数字 :

66.加一 :

67.二进制求和 :

68.文本左右对齐 :

69.x 的平方根 :

70.爬楼梯

: https://blog.csdn.net/love905661433/article/details/85725640

  1. class Solution {
  2. public int climbStairs(int n) {
  3. if(n==0) return 0;
  4. if(n==1) return 1;
  5. if(n==2) return 2;
  6. int [] a = new int[n+1];
  7. a[0] = 0;
  8. a[1] = 1;
  9. a[2] = 2;
  10. for(int i = 3;i<=n;i++){
  11. a[i] = a[i-1]+a[i-2];
  12. }
  13. return a[n];
  14. }
  15. }

71.简化路径 :

72.编辑距离 :

73.矩阵置零 :

74.搜索二维矩阵 :

75. 颜色分类

: https://blog.csdn.net/love905661433/article/details/84640274

分析:(1)三路快排;(2)用两次快排也行,第一次快排结果(<1)(=1 和>1),再对第二部分进行快排,分为(=1)(>1)

 

????????????(还没做出来)76. 最小覆盖子串 : https://blog.csdn.net/love905661433/article/details/84640651

方法一:错误的,对于T中不含有相同的字母是可以的

先放一个错误的,这种对于下面这样的

  1. 输入: S = "ADOBECODEBANC", T = "ABC"
  2. 输出: "BANC"
  1. class Solution {
  2. public String minWindow(String s, String t) {
  3. //根据t做个hash<A,A出现的坐标>
  4. HashMap<Character , Integer> hashmap = new HashMap<Character,Integer>();
  5. for(int i = 0; i<t.length();i++){
  6. hashmap.put(t.charAt(i),-1);//一直出错,是因为这里出错了,这里写错字母了
  7. }
  8. int count = 0;
  9. int i = 0;
  10. while(i<s.length() && count < t.length()){
  11. if(hashmap.containsKey(s.charAt(i))){
  12. if(hashmap.get(s.charAt(i))==-1) count ++;
  13. hashmap.put(s.charAt(i),i);
  14. }
  15. i++;
  16. }
  17. if(count<t.length()) return "";
  18. int [] res = func(hashmap);
  19. while(i<s.length()){
  20. if(hashmap.containsKey(s.charAt(i))){
  21. hashmap.put(s.charAt(i),i);
  22. int [] x = func(hashmap);
  23. if(x[0]<res[0]){
  24. res[0] = x[0];
  25. res[1] = x[1];
  26. res[2] = x[2];
  27. }
  28. }
  29. i++;
  30. }
  31. return s.substring(res[1],res[2]+1);
  32. }
  33. public int[] func(HashMap<Character , Integer> map){
  34. int [] res = new int[3];
  35. res[1] = Integer.MAX_VALUE;
  36. res[2] = Integer.MIN_VALUE;
  37. Iterator mapt = map.entrySet().iterator();
  38. while(mapt.hasNext()){
  39. Map.Entry<Character , Integer> entry = (Map.Entry<Character , Integer>) mapt.next();
  40. res[1] = Math.min(res[1],entry.getValue());
  41. res[2] = Math.max(res[2],entry.getValue());
  42. }
  43. res[0] = res[2]-res[1];
  44. return res;
  45. }
  46. }

但是通不过t中含有重复的字符

输入:"aa" "aa"
输出:“aa”

方法二:正确的

 

 

77.组合 : https://blog.csdn.net/love905661433/article/details/85250115

78.子集 : https://blog.csdn.net/love905661433/article/details/85298479

自己做的:递归+回溯

执行用时 :2 ms, 在所有 Java 提交中击败了89.48% 的用户

内存消耗 :37.1 MB, 在所有 Java 提交中击败了41.50%的用户

  1. class Solution {
  2. public List<List<Integer>> subsets(int[] nums) {
  3. List<List<Integer>> lists = new ArrayList<>();
  4. //首先有一个空的
  5. List<Integer> tlist = new ArrayList<Integer>();
  6. lists.add(tlist);
  7. func(lists,nums,tlist,0);
  8. return lists;
  9. }
  10. public void func(List<List<Integer>> lists,int[] nums,List<Integer> tlist , int start){
  11. if(start >= nums.length) return;
  12. for(int i = start ; i<nums.length;i++){
  13. tlist.add(nums[i]);
  14. lists.add(new ArrayList<>(tlist)); //把子集复制一份加入结果集(必不可少的,不然出错)
  15. //lists.add(tlist);
  16. func(lists,nums,tlist,i+1);
  17. tlist.remove(tlist.size()-1);
  18. }
  19. }
  20. }

改进方法:

解法四 位操作

前方高能!!!!这个方法真的是太太太牛了。参考这里。

数组的每个元素,可以有两个状态,在子数组中和不在子数组中,所有状态的组合就是所有子数组了。

例如,nums = [ 1, 2 , 3 ]。1 代表在,0 代表不在。

1 2 3
0 0 0 -> [     ]
0 0 1 -> [    3]
0 1 0 -> [  2  ]   
0 1 1 -> [  2 3]  
1 0 0 -> [1    ]
1 0 1 -> [1   3]
1 1 0 -> [1 2  ]
1 1 1 -> [1 2 3]

所以我们只需要遍历 0 0 0 到 1 1 1,也就是 0 到 7,然后判断每个比特位是否是 1,是 1 的话将对应数字加入即可。如果数组长度是 n,那么每个比特位是 2 个状态,所有总共就是 2 的 n 次方个子数组。遍历 00 ... 0 到 11 ... 1 即可。

  1. public List<List<Integer>> subsets(int[] nums) {
  2. List<List<Integer>> ans = new ArrayList<>();
  3. int bit_nums = nums.length;
  4. int ans_nums = 1 << bit_nums; //执行 2 的 n 次方
  5. for (int i = 0; i < ans_nums; i++) {
  6. List<Integer> tmp = new ArrayList<>();
  7. int count = 0; //记录当前对应数组的哪一位
  8. int i_copy = i; //用来移位
  9. while (i_copy != 0) {
  10. if ((i_copy & 1) == 1) { //判断当前位是否是 1
  11. tmp.add(nums[count]);
  12. }
  13. count++;
  14. i_copy = i_copy >> 1;//右移一位
  15. }
  16. ans.add(tmp);
  17. }
  18. return ans;
  19. }

作者:windliang
链接:https://leetcode-cn.com/problems/subsets/solution/xiang-xi-tong-su-de-si-lu-fen-xi-duo-jie-fa-by--10/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

79.单词搜索 : https://blog.csdn.net/love905661433/article/details/85298734

给定一个二维网格和一个单词,找出该单词是否存在于网格中。

单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。

示例:

board =
[
  ['A','B','C','E'],
  ['S','F','C','S'],
  ['A','D','E','E']
]

给定 word = "ABCCED", 返回 true.
给定 word = "SEE", 返回 true.
给定 word = "ABCB", 返回 false.

执行用时 :10 ms, 在所有 Java 提交中击败了88.72% 的用户

内存消耗 :45 MB, 在所有 Java 提交中击败了75.00%的用户

方法:递归+回溯

  1. class Solution {
  2. public boolean exist(char[][] board, String word) {
  3. //先找到起始点是word的第一个字母的,找到后,去递归
  4. char[] chars = word.toCharArray();
  5. int first_ch = chars[0];
  6. int [][] flag = new int[board.length][board[0].length];
  7. for(int i = 0;i<board.length;i++){
  8. for(int j = 0;j<board[0].length;j++){
  9. if(board[i][j] == chars[0]){
  10. boolean isExist = func(board,chars,flag , i , j, 0);
  11. if(isExist == true) return true;
  12. }
  13. }
  14. }
  15. return false;
  16. }
  17. public boolean func(char[][] board , char[] chars , int[][] flag , int start , int end, int chars_start){
  18. if(chars_start == chars.length ){
  19. return true;
  20. }
  21. //越界
  22. if(start >= board.length || start < 0 || end < 0 || end >= board[0].length || chars_start >= chars.length) return false;
  23. //该点一定是没有被访问过的
  24. if(flag[start][end] == 1) return false;
  25. if(chars[chars_start] != board[start][end]) return false;
  26. //如果当前相等,就去下一个
  27. flag[start][end] = 1;
  28. //上下左右
  29. boolean res = func(board , chars , flag , start-1 , end , chars_start+1) || func(board , chars , flag , start+1 , end , chars_start+1)||func(board , chars , flag , start , end-1 , chars_start+1)||func(board , chars , flag , start , end+1 , chars_start+1);
  30. flag[start][end] = 0;//易错点:这一步必须要有,有可能第一个数不满足,就去找下一个满足的第一个数字了
  31. return res;
  32. }
  33. }

80. 删除排序数组中的重复项 ii : https://blog.csdn.net/love905661433/article/details/84640177

81.搜索旋转排序数组 II :

82. 删除排序链表中的重复元素 ii : https://blog.csdn.net/love905661433/article/details/84842471

83.删除排序链表中的重复元素(官方解答) : https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list/solution/

84.柱状图中最大的矩形 :

85.最大矩形 :

86. 分隔链表 : https://blog.csdn.net/love905661433/article/details/84842234

87.扰乱字符串 :

88. 合并两个有序数组 : https://blog.csdn.net/love905661433/article/details/84640342

89.格雷编码 :

90.子集 II : https://blog.csdn.net/love905661433/article/details/85298905

91.解码方法 : https://blog.csdn.net/love905661433/article/details/86257919

92. 反转链表 ii : https://blog.csdn.net/love905661433/article/details/84842047

93.复原IP地址 : https://blog.csdn.net/love905661433/article/details/85067983

94. 二叉树的中序遍历 : https://blog.csdn.net/love905661433/article/details/84952877

95.不同的二叉搜索树 II :

96.不同的二叉搜索树 :自己的博客https://blog.csdn.net/qq_39474604/article/details/90671323

97.交错字符串 :

98.验证二叉搜索树 : https://blog.csdn.net/love905661433/article/details/85041087

99.恢复二叉搜索树 :

100. 相同的树 : https://blog.csdn.net/love905661433/article/details/84978845

LeetCode 101- 200

 

101.对称二叉树(官方解答) : https://leetcode-cn.com/problems/symmetric-tree/solution/

102. 二叉树的层次遍历 : https://blog.csdn.net/love905661433/article/details/84977934

103. 二叉树的锯齿形层次遍历 : https://blog.csdn.net/love905661433/article/details/84978019

104.二叉树的最大深度(官方解答) : https://leetcode-cn.com/problems/maximum-depth-of-binary-tree/solution/

105.从前序与中序遍历序列构造二叉树 :

106.从中序与后序遍历序列构造二叉树 :

107. 二叉树的层次遍历 ii : https://blog.csdn.net/love905661433/article/details/84977974

108.将有序数组转换为二叉搜索树 : https://blog.csdn.net/love905661433/article/details/85055171

109.有序链表转换二叉搜索树 :

110.平衡二叉树 : https://blog.csdn.net/love905661433/article/details/85008795

111. 二叉树的最小深度 : https://blog.csdn.net/love905661433/article/details/84978491

112.路径总和 : https://blog.csdn.net/love905661433/article/details/85008820

113.路径总和 II : https://blog.csdn.net/love905661433/article/details/85018760

114.二叉树展开为链表 :

115.不同的子序列 :

116.填充同一层的兄弟节点 :

117.填充同一层的兄弟节点 II :

118. 杨辉三角 : https://blog.csdn.net/love905661433/article/details/83303637

119. 杨辉三角 ii : https://blog.csdn.net/love905661433/article/details/83810630

120.三角形最小路径和 : https://blog.csdn.net/love905661433/article/details/85726383

121. 买卖股票的最佳时机 : https://blog.csdn.net/love905661433/article/details/83621681

122. 买卖股票的最佳时机 ii : https://blog.csdn.net/love905661433/article/details/83620102

123.买卖股票的最佳时机 III :

124.二叉树中的最大路径和 :

125. 验证回文串 : https://blog.csdn.net/love905661433/article/details/84137215

126.单词接龙 II :

127.单词接龙 :

128.最长连续序列 :

129.求根到叶子节点数字之和 : https://blog.csdn.net/love905661433/article/details/85018783

130.被围绕的区域 :

131.分割回文串 : https://blog.csdn.net/love905661433/article/details/85107942

132.分割回文串 II :

133.克隆图 :

134.加油站 :

135.分发糖果 :

136.只出现一次的数字 :

137.只出现一次的数字 II :

138.复制带随机指针的链表 :

139.单词拆分 :

140.单词拆分 II :

141. 环形链表 : https://blog.csdn.net/love905661433/article/details/84797850

142.环形链表 II (自己的博客):https://blog.csdn.net/qq_39474604/article/details/90702954

143. 重排链表 : https://blog.csdn.net/love905661433/article/details/84960596

144. 二叉树的前序遍历 : https://blog.csdn.net/love905661433/article/details/84952877

145. 二叉树的后序遍历 : https://blog.csdn.net/love905661433/article/details/84952877

146.LRU缓存机制 :

147. 对链表进行插入排序 : https://blog.csdn.net/love905661433/article/details/84842607

148. 排序链表 : https://blog.csdn.net/love905661433/article/details/84930685

https://blog.csdn.net/qq_39474604/article/details/90698698(自己的博客)

149.直线上最多的点数 :

150. 逆波兰表达式求值 : https://blog.csdn.net/love905661433/article/details/84931345

151.翻转字符串里的单词 :

152.乘积最大子序列 :

153.寻找旋转排序数组中的最小值 :

154.寻找旋转排序数组中的最小值 II :

155.最小栈 :

160. 相交链表 : https://blog.csdn.net/love905661433/article/details/84797915

160.相交链表 :

162.寻找峰值 :

164.最大间距 :

165.比较版本号 :

166.分数到小数 :

167. 两数之和 ii - 输入有序数组 : https://blog.csdn.net/love905661433/article/details/83657039

168.Excel表列名称 :

169. 求众数 : https://blog.csdn.net/love905661433/article/details/83545138

171.Excel表列序号 :

172.阶乘后的零 :

173.二叉搜索树迭代器 :

174.地下城游戏 :

175.组合两个表(官方解答) : https://leetcode-cn.com/problems/combine-two-tables/solution/

176.第二高的薪水 :

177.第N高的薪水 :

178.分数排名 :

179.最大数 :

180.连续出现的数字 :

181.超过经理收入的员工 :

182.查找重复的电子邮箱(官方解答) : https://leetcode-cn.com/problems/duplicate-emails/solution/

183.从不订购的客户(官方解答) : https://leetcode-cn.com/problems/customers-who-never-order/solution/

184.部门工资最高的员工 :

185.部门工资前三高的员工 :

187.重复的DNA序列 :

188.买卖股票的最佳时机 IV :

189.旋转数组 :

190.颠倒二进制位 :

191.位1的个数 :

192.统计词频 :

193.有效电话号码 :

194.转置文件 :

195.第十行 :

196.删除重复的电子邮箱(官方解答) : https://leetcode-cn.com/problems/delete-duplicate-emails/solution/

197.上升的温度(官方解答) : https://leetcode-cn.com/problems/rising-temperature/solution/

198.打家劫舍

: https://blog.csdn.net/love905661433/article/details/86568972

  1. class Solution {
  2. public int rob(int[] nums) {
  3. int length = nums.length;
  4. if(length == 0) return 0;
  5. if(length == 1) return nums[0];
  6. if(length == 2) return Math.max(nums[0],nums[1]);
  7. if(length == 3) return Math.max(nums[0]+nums[2],nums[1]);
  8. nums[2] = nums[0]+nums[2];
  9. for(int i = 3;i<length ;i++){
  10. nums[i] = Math.max(Math.max(nums[i]+nums[i-3] , nums[i]+nums[i-2]) , nums[i-1]);
  11. }
  12. return Math.max(nums[length-2],nums[length-1]);
  13. }
  14. }

199. 二叉树的右视图 : https://blog.csdn.net/love905661433/article/details/84978063

200.岛屿的个数 : https://blog.csdn.net/love905661433/article/details/85299506

LeetCode 201- 300

 

201.数字范围按位与 :

202. 快乐数 : https://blog.csdn.net/love905661433/article/details/84779178

203. 移除链表元素 : https://blog.csdn.net/love905661433/article/details/84842176

204.计数质数 :

205. 同构字符串 : https://blog.csdn.net/love905661433/article/details/84779425

206. 反转链表 : https://blog.csdn.net/love905661433/article/details/84797989

207.课程表 :

208.实现 Trie (前缀树) :

209. 长度最小的子数组 : https://blog.csdn.net/love905661433/article/details/84640454

210.课程表 II :

211.添加与搜索单词 - 数据结构设计 :

212.单词搜索 II :

213.打家劫舍 II : https://blog.csdn.net/love905661433/article/details/86569046

214.最短回文串 :

215. 数组中的第k个最大元素 : https://blog.csdn.net/love905661433/article/details/84930799

216.组合总和 III : https://blog.csdn.net/love905661433/article/details/85250446

217. 存在重复元素 : https://blog.csdn.net/love905661433/article/details/84797502

218.天际线问题 :

219. 存在重复元素 ii : https://blog.csdn.net/love905661433/article/details/84797476

220.存在重复元素 III :

221.最大正方形 :

222.完全二叉树的节点个数 : https://blog.csdn.net/love905661433/article/details/85008777

223.矩形面积 :

224.基本计算器 :

225.用队列实现栈 :

226. 翻转二叉树 : https://blog.csdn.net/love905661433/article/details/84978615

227.基本计算器 II :

228.汇总区间 :

229.求众数 II :

230.二叉搜索树中第K小的元素 : https://blog.csdn.net/love905661433/article/details/85055226

231.2的幂 :

232.用栈实现队列 :

233.数字1的个数 :

234. 回文链表 : https://blog.csdn.net/love905661433/article/details/84797776

自己的博客:https://blog.csdn.net/qq_39474604/article/details/90696708

235.二叉搜索树的最近公共祖先 :

236.二叉树的最近公共祖先 : https://blog.csdn.net/love905661433/article/details/85062991

237. 删除链表中的节点 : https://blog.csdn.net/love905661433/article/details/84931057

238.除自身以外数组的乘积 :

239.滑动窗口最大值 :

240.搜索二维矩阵 II :

241.为运算表达式设计优先级 :

242. 有效的字母异位词 : https://blog.csdn.net/love905661433/article/details/84779104

257.二叉树的所有路径 : https://blog.csdn.net/love905661433/article/details/85008906

258.各位相加 :

260.只出现一次的数字 III :

262.行程和用户 :

263.丑数 :

264.丑数 II :

268. 缺失数字 : https://blog.csdn.net/love905661433/article/details/83620692

273.整数转换英文表示 :

274.H指数 :

275.H指数 II :

278.第一个错误的版本 :

279.完全平方数 : https://blog.csdn.net/qq_17550379/article/details/80875782

282.给表达式添加运算符 :

283. 移动零 : https://blog.csdn.net/love905661433/article/details/83578058

284.顶端迭代器 :

287.寻找重复数 :

289.生命游戏 :

290. 单词模式 : https://blog.csdn.net/love905661433/article/details/84779322

292.Nim游戏 :

295.数据流的中位数 :

297.二叉树的序列化与反序列化 :

299.猜数字游戏 :

300.最长上升子序列 :

LeetCode 301- 400

 

301.删除无效的括号 :

303.区域和检索 - 数组不可变 :

304.二维区域和检索 - 矩阵不可变 :

306.累加数 :

307.区域和检索 - 数组可修改 :

309.最佳买卖股票时机含冷冻期 :

310.最小高度树 :

312.戳气球 :

313.超级丑数 :

315.计算右侧小于当前元素的个数 : https://blog.csdn.net/jmspan/article/details/51219203

316.去除重复字母 :

318.最大单词长度乘积 :

319.灯泡开关 :

321.拼接最大数 :

322.零钱兑换 :

324.摆动排序 II :

326.3的幂 :

327.区间和的个数 :

328. 奇偶链表 : https://blog.csdn.net/love905661433/article/details/84842310

329.矩阵中的最长递增路径 :

330.按要求补齐数组 :

331.验证二叉树的前序序列化 :

332.重新安排行程 :

334.递增的三元子序列 :

335.路径交叉 :

336.回文对 :

337.打家劫舍 III : https://blog.csdn.net/love905661433/article/details/86569116

题目:节点不能挨着,找最大的和

思路:进入一个点,有两种情况,可以抢,不可以抢

如果可以抢,可以有两种选择:可以选择抢,可以选择不抢

如果这个节点不可以抢,那就只能选择不枪

  1. /**
  2. * Definition for a binary tree node.
  3. * public class TreeNode {
  4. * int val;
  5. * TreeNode left;
  6. * TreeNode right;
  7. * TreeNode(int x) { val = x; }
  8. * }
  9. */
  10. class Solution {
  11. public static int res = 0;
  12. public int rob(TreeNode root) {
  13. res = Math.max(dfs(root , true),dfs(root , false));
  14. return res;
  15. }
  16. public int dfs(TreeNode root , boolean qiang){
  17. if(root == null) return 0;
  18. if(qiang == true){
  19. //如果要抢,可以抢,可以不抢
  20. //抢
  21. int qiang_res = root.val + dfs(root.left , false) + dfs(root.right , false);
  22. int buqiang_res = dfs(root.left , true) + dfs(root.right , true);
  23. res = Math.max(qiang_res , buqiang_res);
  24. }else{
  25. //如果不能抢,那就一定不能抢
  26. res = dfs(root.left , true) + dfs(root.right , true);
  27. }
  28. return res;
  29. }
  30. }

分析:用了递归,所以很慢,

改进:尝试改成非递归,改成循环的

,想着用两个栈,一个栈存节点,一个栈存是否抢的信息,然后失败了,没能写下去

看别人的方法:

高效之处在于:少做了很多重复的操作

  1. class Solution {
  2. public int rob(TreeNode root) {
  3. return dfs(root)[1];
  4. }
  5. private int[] dfs(TreeNode root) {
  6. int[] rob ={0, 0};
  7. if(root != null) {
  8. int[] robLeft = dfs(root.left);
  9. int[] robRight = dfs(root.right);
  10. rob[0] = robLeft[1] + robRight[1];
  11. rob[1] = Math.max(robLeft[0] + robRight[0] + root.val, rob[0]);
  12. }
  13. return rob;
  14. }
  15. }

338.比特位计数 :

341. 扁平化嵌套列表迭代器 : https://blog.csdn.net/love905661433/article/details/84960740

342.4的幂 :

343.整数拆分 : https://blog.csdn.net/liyuanbhu/article/details/51198124

344. 反转字符串 : https://blog.csdn.net/love905661433/article/details/84137251

345. 反转字符串中的元音字母 : https://blog.csdn.net/love905661433/article/details/84137305

347.前K个高频元素 : https://blog.csdn.net/love905661433/article/details/85008932

自己的博客:https://blog.csdn.net/qq_39474604/article/details/90672266

以前做的:用TreeMap<数字,数字出现的次数>,因为这种数据结构是有序的,但是默认是按照key来排序的,所以就重写,使其按照出现的次数排序

  1. class Solution {
  2. public List<Integer> topKFrequent(int[] nums, int k) {
  3. List<Integer> list = new ArrayList<Integer>();
  4. Map<Integer,Integer> map = new TreeMap<Integer, Integer>();
  5. for(int i = 0 ;i<nums.length;i++){
  6. if(map.containsKey(nums[i])){
  7. //如果map里面已经有了这个值,那么就加一
  8. int count = map.get(nums[i]);
  9. count ++;
  10. map.put(nums[i],count);
  11. }else {
  12. //如果不存在就添加,并且把count 设置为1
  13. map.put(nums[i],1);
  14. }
  15. }
  16. //把treemap的元素放到一个list里面
  17. List<Map.Entry<Integer,Integer>> t_list = new ArrayList<Map.Entry<Integer, Integer>>(map.entrySet());
  18. //list里面的元素按照map的value排序
  19. Collections.sort(t_list, new Comparator<Map.Entry<Integer, Integer>>() {
  20. @Override
  21. public int compare(Map.Entry<Integer, Integer> o1, Map.Entry<Integer, Integer> o2) {
  22. if(o1.getValue()>o2.getValue()) return -1;
  23. if(o1.getValue()==o2.getValue()) return 0;
  24. return 1;
  25. }
  26. });
  27. int i = 0;
  28. for(Map.Entry<Integer,Integer> e:t_list){
  29. if(i<k) list.add(e.getKey());
  30. else break;
  31. i++;
  32. //System.out.println(e.getKey()+":"+e.getValue());
  33. }
  34. return list;
  35. }
  36. }

这个题也可以用堆:

还是用hashmap把元素先遍历一遍,再插入到堆中,维护一个大小为k的堆

 

349. 两个数组的交集 : https://blog.csdn.net/love905661433/article/details/84640712

350. 两个数组的交集 ii : https://blog.csdn.net/love905661433/article/details/84640775

352.将数据流变为多个不相交间隔 :

354.俄罗斯套娃信封问题 :

355.设计推特 :

357.计算各个位数不同的数字个数 :

363.矩形区域不超过 K 的最大数值和 :

365.水壶问题 :

367.有效的完全平方数 :

368.最大整除子集 :

371.两整数之和 :

372.超级次方 :

373.查找和最小的K对数字 :

374.猜数字大小 :

375.猜数字大小 II :

376.摆动序列 :

377.组合总和 Ⅳ :

378.有序矩阵中第K小的元素 :

380.常数时间插入、删除和获取随机元素 :

381.O(1) 时间插入、删除和获取随机元素 - 允许重复 :

382.链表随机节点 :

383.赎金信 :

384.打乱数组 :

385.迷你语法分析器 :

386.字典序排数 :

387.字符串中的第一个唯一字符 :

388.文件的最长绝对路径 :

389.找不同 :

390.消除游戏 :

391.完美矩形 :

392.判断子序列 :

393.UTF-8 编码验证 :

394.字符串解码 :

395.至少有K个重复字符的最长子串 :

396.旋转函数 :

397.整数替换 :

398.随机数索引 :

399.除法求值 :

400.第N个数字 :

LeetCode 401- 500

 

401.二进制手表 : https://blog.csdn.net/love905661433/article/details/85299879

402.移掉K位数字 :

403.青蛙过河 :

404.左叶子之和 : https://blog.csdn.net/love905661433/article/details/85008846

405.数字转换为十六进制数 :

406.根据身高重建队列 :https://leetcode.com/problems/queue-reconstruction-by-height/

分析思路:

按照第一个数字,从小到大排列,如果第一个数字相同,第二个数字按照从小到大排列(自己写了排序算法)

如上:7最大,第一个数字是7的不变:

[4 4] [5 0 ] [5 2] [6 1] [7 0] [7 1]

[6 1]往后插入,即:

[4 4] [5 0 ] [5 2] [7 0] [6 1] [7 1]

这时候,操作[5 2],因为与5相同的前面还有一个,所以后面不必挪动两位,只需要挪动2-1 = 1位就可以了

有点插入排序的意思

  1. class Solution {
  2. public int[][] reconstructQueue(int[][] people) {
  3. int renshu = people.length;//6
  4. if(renshu == 0 || renshu == 1) return people;
  5. for(int i=0;i<renshu-1;i++){
  6. for(int j = 0;j<renshu-i-1;j++){
  7. if(com(people,j,j+1)) swap(people , j ,j+1);
  8. }
  9. }
  10. //for(int i = 0;i<renshu ;i++){
  11. // System.out.print("["+people[i][0]+","+people[i][1]+"]");
  12. //}
  13. //System.out.println(" ");
  14. //最大的数字,先不变
  15. int i = renshu-1-1;
  16. while(i>=0 && people[i][0]==people[renshu-1][0]) i--;
  17. //System.out.println("1i:"+i);
  18. while(i>=0){
  19. //把当前i放到前面的地方
  20. int sum = 0;//与当前i相等的有几个
  21. for(int k = i;k>=0 && people[k][0]==people[i][0];k--) sum++;
  22. //System.out.println("sum:"+sum);
  23. int hou_high_dangqian = people[i][1]-(sum-1);
  24. //System.out.println("hou_high_dangqian:"+hou_high_dangqian);
  25. int t_0 = people[i][0];
  26. int t_1 = people[i][1];
  27. int j = 0;
  28. for(j = 0;j<hou_high_dangqian ; j++){
  29. people[i+j][0] = people[i+j+1][0];
  30. people[i+j][1] = people[i+j+1][1];
  31. //swap(people , i+j , i+j+1);
  32. }
  33. people[i+j][0] = t_0;
  34. people[i+j][1] = t_1;
  35. //for(int ii = 0;ii<renshu ;ii++){
  36. // System.out.print("["+people[ii][0]+","+people[ii][1]+"]");
  37. //}
  38. i--;
  39. }
  40. return people;
  41. }
  42. public boolean com(int [][] people , int i , int j){
  43. //i>j 返回true
  44. if(people[i][0]>people[j][0]) return true;
  45. if(people[i][0]<people[j][0]) return false;
  46. if(people[i][1]>people[j][1]) return true;
  47. return false;
  48. }
  49. public void swap(int[][] people , int i , int j){
  50. int t = people[i][0];
  51. people[i][0] = people[j][0];
  52. people[j][0] = t;
  53. t = people[i][1];
  54. people[i][1] = people[j][1];
  55. people[j][1] = t;
  56. }
  57. }

407.接雨水 II :

409.最长回文串 :

410.分割数组的最大值 :

412.Fizz Buzz :

413.等差数列划分 :

414.第三大的数 :

415.字符串相加 :

416.分割等和子集 :

417.太平洋大西洋水流问题 :

419.甲板上的战舰 :

420.强密码检验器 :

421.数组中两个数的最大异或值 :

423.从英文中重建数字 :

424.替换后的最长重复字符 :

427.建立四叉树 :

429.N叉树的层序遍历 :

430.扁平化多级双向链表 :

432.全 O(1) 的数据结构 :

433.最小基因变化 :

434.字符串中的单词数 :

435.无重叠区间 :

436.寻找右区间 :

437.路径总和 III : https://blog.csdn.net/love905661433/article/details/85018809

438. 找到字符串中所有字母异位词 : https://blog.csdn.net/love905661433/article/details/84640594

440.字典序的第K小数字 :

441.排列硬币 :

442.数组中重复的数据 :

443.压缩字符串 :

445. 两数相加 ii : https://blog.csdn.net/love905661433/article/details/84842369

446.等差数列划分 II - 子序列 :

447.回旋镖的数量 :

448. 找到所有数组中消失的数字 : https://blog.csdn.net/love905661433/article/details/83814993

449.序列化和反序列化二叉搜索树 :

450.删除二叉搜索树中的节点 : https://blog.csdn.net/love905661433/article/details/85055102

451. 根据字符出现频率排序 : https://blog.csdn.net/love905661433/article/details/84779547

452.用最少数量的箭引爆气球 :

453.最小移动次数使数组元素相等 :

454. 四数相加 ii : https://blog.csdn.net/love905661433/article/details/84779844

455.分发饼干 :

456.132模式 :

457.环形数组循环 :

458.可怜的小猪 :

459.重复的子字符串 :

460.LFU缓存 :

461.汉明距离 :

462.最少移动次数使数组元素相等 II :

463.岛屿的周长 :

464.我能赢吗 :

466.统计重复个数 :

467.环绕字符串中唯一的子字符串 :

468.验证IP地址 :

470.用 Rand7() 实现 Rand10() :

472.连接词 :

473.火柴拼正方形 :

474.一和零 :

475.供暖器 :

476.数字的补数 :

477.汉明距离总和 :

478.在圆内随机生成点 :

479.最大回文数乘积 :

480.滑动窗口中位数 :

481.神奇字符串 :

482.密钥格式化 :

483.最小好进制 :

485. 最大连续1的个数 : https://blog.csdn.net/love905661433/article/details/83619476

486.预测赢家 :

488.祖玛游戏 :

491.递增子序列 :

492.构造矩形 :

493.翻转对 :

494.目标和 :

495.提莫攻击 :

496.下一个更大元素 I :

497.非重叠矩形中的随机点 :

498.对角线遍历 :

500.键盘行 :

LeetCode 501- 600

 

501.二叉搜索树中的众数 :

502.IPO :

503.下一个更大元素 II :

504.七进制数 :

506.相对名次 :

507.完美数 :

508.出现次数最多的子树元素和 :

513.找树左下角的值 :

514.自由之路 :

515.在每个树行中找最大值 :

516.最长回文子序列 :

517.超级洗衣机 :

518.零钱兑换 II :

519.随机翻转矩阵 :

520.检测大写字母 :

521.最长特殊序列 Ⅰ :

522.最长特殊序列 II :

523.连续的子数组和 :

524.通过删除字母匹配到字典里最长单词 :

525.连续数组 :

526.优美的排列 :

528.按权重随机选择 :

529.扫雷游戏 :

530.二叉搜索树的最小绝对差 :

532.数组中的K-diff数对 :

535.TinyURL 的加密与解密 :

537.复数乘法(官方解答) : https://leetcode-cn.com/problems/complex-number-multiplication/solution/

538.把二叉搜索树转换为累加树 :

539.最小时间差 :

540.有序数组中的单一元素 :

541.反转字符串 II :

542.01 矩阵 :

543.二叉树的直径 :

546.移除盒子 :

547.朋友圈 :

551.学生出勤记录 I :

552.学生出勤记录 II :

553.最优除法 :

554.砖墙 :

556.下一个更大元素 III :

557.反转字符串中的单词 III :

558.四叉树交集 :

559.N叉树的最大深度 :

560.和为K的子数组 :

561. 数组拆分 i : https://blog.csdn.net/love905661433/article/details/83276956

563.二叉树的坡度 :

564.寻找最近的回文数 :

565.数组嵌套 :

566. 重塑矩阵 : https://blog.csdn.net/love905661433/article/details/83414915

567.字符串的排列 :

572.另一个树的子树 :

575.分糖果 :

576.出界的路径数 :

581.最短无序连续子数组 :

583.两个字符串的删除操作 :

587.安装栅栏 :

589.N叉树的前序遍历 :

590.N叉树的后序遍历 :

591.标签验证器 :

592.分数加减运算 :

593.有效的正方形 :

594.最长和谐子序列 :

595.大的国家 :

596.超过5名学生的课 :

598.范围求和 II :

599.两个列表的最小索引总和 :

600.不含连续1的非负整数 :

LeetCode 601- 700

 

601.体育馆的人流量 :

605.种花问题 :

606.根据二叉树创建字符串 :

609.在系统中查找重复文件 :

611.有效三角形的个数 :

617.合并二叉树 :https://leetcode.com/problems/merge-two-binary-trees/

思路:把第二个树的值加到第一个树上

  1. class Solution {
  2. public TreeNode mergeTrees(TreeNode t1, TreeNode t2) {
  3. if(t1 == null && t2 != null) return t2;
  4. if(t1 != null && t2 == null) return t1;
  5. if(t1 != null && t2 != null){
  6. t1.val += t2.val;
  7. if(t1.left == null){
  8. t1.left = t2.left;
  9. }else mergeTrees(t1.left , t2.left);
  10. if(t1.right == null){
  11. t1.right = t2.right;
  12. }else mergeTrees(t1.right , t2.right);
  13. }
  14. return t1;
  15. }
  16. }

620.有趣的电影(官方解答) : https://leetcode-cn.com/problems/not-boring-movies/solution/

621.任务调度器 :

622.设计循环队列 :

623.在二叉树中增加一行 :

626.换座位 :

627.交换工资(官方解答) : https://leetcode-cn.com/problems/swap-salary/solution/

628.三个数的最大乘积 :

629.K个逆序对数组 :

630.课程表 III :

632.最小区间 :

633.平方数之和 :

636.函数的独占时间 :

637.二叉树的层平均值 :

638.大礼包 :

639.解码方法 2 :

640.求解方程 :

641.设计循环双端队列 :

643.子数组最大平均数 I :

645.错误的集合 :

646.最长数对链 :

647.回文子串 :https://leetcode.com/problems/palindromic-substrings/

注意:写成两个for循环不会出错,写成一个for循环就会出错

  1. class Solution {
  2. public int countSubstrings(String s) {
  3. int len = s.length();
  4. int res = len;
  5. //分析:如果i到j是一个回文串,则f[i][j] = 1;
  6. //如果f[i][j] = 1 && s[i-1]==s[j+1];
  7. //右上三角,i<=j
  8. for(int x = 0;x<len ;x++){
  9. int i = x;
  10. int j = x+1;
  11. while(i>=0 && j<len){
  12. if(s.charAt(i)==s.charAt(j)){
  13. i--;
  14. j++;
  15. res++;
  16. }else break;
  17. }
  18. i = x-1;
  19. j = x+1;
  20. while(i>=0 && j<len){
  21. if(s.charAt(i)==s.charAt(j)){
  22. i--;
  23. j++;
  24. res++;
  25. }else break;
  26. }
  27. }
  28. return res;
  29. }
  30. }

648.单词替换 :

649.Dota2 参议院 :

650.只有两个键的键盘 :

652.寻找重复的子树 :

653.两数之和 IV - 输入 BST :

654.最大二叉树 :

655.输出二叉树 :

657.机器人能否返回原点 :

658.找到 K 个最接近的元素 :

659.分割数组为连续子序列 :

661. 图片平滑器 : https://blog.csdn.net/love905661433/article/details/83655054

662.二叉树最大宽度 :

664.奇怪的打印机 :

665.非递减数列 :

667.优美的排列 II :

668.乘法表中第k小的数 :

669.修剪二叉搜索树 :

670.最大交换 :

671.二叉树中第二小的节点 :

672.灯泡开关 Ⅱ :

673.最长递增子序列的个数 :

674.最长连续递增序列 :

675.为高尔夫比赛砍树 :

676.实现一个魔法字典 :

677.键值映射 :

678.有效的括号字符串 :

679.24点游戏 :

680.验证回文字符串 Ⅱ :

682.棒球比赛(官方解答) : https://leetcode-cn.com/problems/baseball-game/solution/

684.冗余连接 :

685.冗余连接 II :

686.重复叠加字符串匹配 :

687.最长同值路径 :

688.“马”在棋盘上的概率 :

689.三个无重叠子数组的最大和 :

690.员工的重要性 :

691.贴纸拼词 :

692.前K个高频单词 :

693.交替位二进制数 :

695. 岛屿的最大面积 : https://blog.csdn.net/love905661433/article/details/83794258

696.计数二进制子串 :

697.数组的度 : https://blog.csdn.net/love905661433/article/details/83992603

698.划分为k个相等的子集 :

699.掉落的方块 :

700.二叉搜索树中的搜索 :

LeetCode 701- 800

 

701.二叉搜索树中的插入操作 :

703.数据流中的第K大元素 :

704.二分查找 :

705.设计哈希集合 :

706.设计哈希映射 :

707.设计链表 :

709.转换成小写字母 :

710.黑名单中的随机数 :

712.两个字符串的最小ASCII删除和 :

713.乘积小于K的子数组 :

714.买卖股票的最佳时机含手续费 :

715.Range 模块 :

717. 1比特与2比特字符 : https://blog.csdn.net/love905661433/article/details/83415650

718.最长重复子数组 :

719.找出第 k 小的距离对 :

720.词典中最长的单词 :

721.账户合并 :

722.删除注释 :

724.寻找数组的中心索引 :

725.分隔链表 :

726.原子的数量 :

728.自除数 :

729.我的日程安排表 I :

730.统计不同回文子字符串 :

731.我的日程安排表 II :

732.我的日程安排表 III :

733.图像渲染 :

735.行星碰撞 :

736.Lisp 语法解析 :

738.单调递增的数字 :

739.每日温度(自己的博客) :https://blog.csdn.net/qq_39474604/article/details/90602475

740.删除与获得点数 :

741.摘樱桃 :

743.网络延迟时间 :

744.寻找比目标字母大的最小字母 :

745.前缀和后缀搜索 :

746.使用最小花费爬楼梯 :

747.至少是其他数字两倍的最大数 :

748.最短完整词 :

749.隔离病毒 :

752.打开转盘锁 :

753.破解保险箱 :

754.到达终点数字 :

756.金字塔转换矩阵 :

757.设置交集大小至少为2 :

761.特殊的二进制序列 :

762.二进制表示中质数个计算置位 :

763.划分字母区间 :

764.最大加号标志 :

765.情侣牵手 :

766. 托普利茨矩阵 : https://blog.csdn.net/love905661433/article/details/83544633

767.重构字符串 :

768.最多能完成排序的块 II :

769.最多能完成排序的块 :

770.基本计算器 IV :

771.宝石与石头 :

773.滑动谜题 :

775.全局倒置与局部倒置 :

777.在LR字符串中交换相邻字符 :

778.水位上升的泳池中游泳 :

779.第K个语法符号 :

780.到达终点 :

781.森林中的兔子 :

782.变为棋盘 :

783.二叉搜索树结点最小距离 :

784.字母大小写全排列 :

785.判断二分图 :

786.第 K 个最小的素数分数 :

787.K 站中转内最便宜的航班 :

788.旋转数字 :

789.逃脱阻碍者 :

790.多米诺和托米诺平铺 :

791.自定义字符串排序 :

792.匹配子序列的单词数 :

793.阶乘函数后K个零 :

794.有效的井字游戏 :

795.区间子数组个数 :

796.旋转字符串 :

797.所有可能的路径 :

798.得分最高的最小轮调 :

799.香槟塔 :

LeetCode 801- 900

 

801.使序列递增的最小交换次数 :

802.找到最终的安全状态 :

803.打砖块 :

804.唯一摩尔斯密码词 :

805.数组的均值分割 :

806.写字符串需要的行数 :

807.保持城市天际线 :

808.分汤 :

809.情感丰富的文字 :

810.黑板异或游戏 :

811.子域名访问计数 :

812.最大三角形面积 :

813.最大平均值和的分组 :

814.二叉树剪枝 :

815.公交路线 :

816.模糊坐标 :

817.链表组件 :

818.赛车 :

819.最常见的单词 :

820.单词的压缩编码 :

821.字符的最短距离 :

822.翻转卡片游戏 :

823.带因子的二叉树 :

824.山羊拉丁文 :

825.适龄的朋友 :

826.安排工作以达到最大收益 :

827.最大人工岛 :

828.独特字符串 :

829.连续整数求和 :

830. 较大分组的位置 : https://blog.csdn.net/love905661433/article/details/84797613

831.隐藏个人信息 :

832.翻转图像 :

833.字符串中的查找与替换 :

834.树中距离之和 :

835.图像重叠 :

836.矩形重叠 :

837.新21点 :

838.推多米诺 :

839.相似字符串组 :

840.矩阵中的幻方 :

841.钥匙和房间 :

842.将数组拆分成斐波那契序列 :

843.猜猜这个单词 :

844.比较含退格的字符串 :

845.数组中的最长山脉 :

846.一手顺子 :

847.访问所有节点的最短路径 :

848.字母移位 :

849.到最近的人的最大距离 :

850.矩形面积 II :

851.喧闹和富有(官方解答) : https://leetcode-cn.com/problems/loud-and-rich/solution/

852.山脉数组的峰顶索引 :

853.车队 :

854.相似度为 K 的字符串 :

855.考场就座 :

856.括号的分数 :

857.雇佣 K 名工人的最低成本 :

858.镜面反射 :

859.亲密字符串(官方解答) : https://leetcode-cn.com/problems/buddy-strings/solution/

860.柠檬水找零(官方解答) : https://leetcode-cn.com/problems/lemonade-change/solution/

861.翻转矩阵后的得分 :

862.和至少为 K 的最短子数组 :

863.二叉树中所有距离为 K 的结点 :

864.获取所有钥匙的最短路径 :

865.具有所有最深结点的最小子树 :

866.回文素数 :

867. 转置矩阵 : https://blog.csdn.net/love905661433/article/details/83302961

868.二进制间距(官方解答) : https://leetcode-cn.com/problems/binary-gap/solution/

869.重新排序得到 2 的幂 :

870.优势洗牌(官方解答) : https://leetcode-cn.com/problems/advantage-shuffle/solution/

871.最低加油次数 :

872.叶子相似的树(官方解答) : https://leetcode-cn.com/problems/leaf-similar-trees/solution/

873.最长的斐波那契子序列的长度(官方解答) : https://leetcode-cn.com/problems/length-of-longest-fibonacci-subsequence/solution/

874.模拟行走机器人(官方解答) : https://leetcode-cn.com/problems/walking-robot-simulation/solution/

875.爱吃香蕉的珂珂(官方解答) : https://leetcode-cn.com/problems/koko-eating-bananas/solution/

876.链表的中间结点(官方解答) : https://leetcode-cn.com/problems/middle-of-the-linked-list/solution/

877.石子游戏(官方解答) : https://leetcode-cn.com/problems/stone-game/solution/

878.第 N 个神奇数字 :

879.盈利计划(官方解答) : https://leetcode-cn.com/problems/profitable-schemes/solution/

880.索引处的解码字符串(官方解答) : https://leetcode-cn.com/problems/decoded-string-at-index/solution/

881.救生艇(官方解答) : https://leetcode-cn.com/problems/boats-to-save-people/solution/

882.细分图中的可到达结点(官方解答) : https://leetcode-cn.com/problems/reachable-nodes-in-subdivided-graph/solution/

883.三维形体投影面积(官方解答) : https://leetcode-cn.com/problems/projection-area-of-3d-shapes/solution/

884.两句话中的不常见单词(官方解答) : https://leetcode-cn.com/problems/uncommon-words-from-two-sentences/solution/

885.螺旋矩阵 III(官方解答) : https://leetcode-cn.com/problems/spiral-matrix-iii/solution/

886.可能的二分法(官方解答) : https://leetcode-cn.com/problems/possible-bipartition/solution/

888.公平的糖果交换(官方解答) : https://leetcode-cn.com/problems/fair-candy-swap/solution/

889.根据前序和后序遍历构造二叉树(官方解答) : https://leetcode-cn.com/problems/construct-binary-tree-from-preorder-and-

891.子序列宽度之和(官方解答) : https://leetcode-cn.com/problems/sum-of-subsequence-widths/solution/

892.三维形体的表面积(官方解答) : https://leetcode-cn.com/problems/surface-area-of-3d-shapes/solution/

893.特殊等价字符串组(官方解答) : https://leetcode-cn.com/problems/groups-of-special-equivalent-strings/solution/

894.所有可能的满二叉树(官方解答) : https://leetcode-cn.com/problems/all-possible-full-binary-trees/solution/

895.最大频率栈(官方解答) : https://leetcode-cn.com/problems/maximum-frequency-stack/solution/

896. 单调数列 : https://blog.csdn.net/love905661433/article/details/83624974

905. 按奇偶排序数组 : https://blog.csdn.net/love905661433/article/details/83271962

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/615518
推荐阅读
相关标签
  

闽ICP备14008679号