前言 📢
本日记为个人的刷题学习日记,内容非原创,仅为自己复习知识时,能够看得懂自己写的CV的代码,快速理解题意。另外,👍力扣官方的题解很好用,三叶姐🍭nb!!!!!
448 找到数组中消失的数字📝
题意
- 给你一个含
n
个整数的数组 nums
,其中 nums[i]
在区间 [1, n]
内。请你找出所有在 [1, n]
范围内但没有出现在 nums
中的数字,并以数组的形式返回结果。 - 输入:
nums = [4, 3, 2, 7, 8, 2, 3, 1]
输出: [5, 6]
思路
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| class Solution { public List<Integer> findDisappearedNumbers(int[] nums) { int len = nums.length; int[] newNums = new int[len+1]; for(int i=0; i<len; i++) { newNums[nums[i]] = 1; } List<Integer> list = new ArrayList<>(); for(int i=1; i<len+1; i++) { if(newNums[i] == 0) { list.add(i); } } return list; } }
|

- 排序、验证递增关系。若数字均出现,则为单调递增的序列,即[1, 2, 3, ,4, 5, …]
- 只遍历了一遍数组,也没有新建任何其他项,只要要求返回的list
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| class Solution { public List<Integer> findDisappearedNumbers(int[] nums) { Arrays.sort(nums); int len = nums.length; List<Integer> list = new ArrayList<>(); int start = 1, end = len; if(nums[0] != 1) { while(start < nums[0]) { list.add(start); start++; } } if(nums[len - 1] < len) { while(nums[len-1] < end) { list.add(end); end--; } }
for(int i=1; i<len; i++) { if(nums[i] == nums[i-1] || nums[i] == nums[i-1] + 1) { continue; } else { while(nums[i-1] + 1 < nums[i]) { list.add(nums[i-1] + 1); nums[i-1]++; } } } return list; } }
|

179 最大数📝
题意
- 给定一组非负整数
nums
,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。 - 输出结果可能非常大,所以你需要返回一个字符串而不是整数。
return String
思路
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| class Solution { public String largestNumber(int[] nums) { int len = nums.length; String[] str = new String[len]; for(int i=0; i<len; i++) { str[i] = "" + nums[i]; } Arrays.sort(str, (a, b) -> { String sa = a + b, sb = b + a; return sb.compareTo(sa); }); StringBuilder sb = new StringBuilder(); for(String aStr : str) { sb.append(aStr); } int len2 = sb.length(); int k = 0; while(k < len - 1 && sb.charAt(k) == '0') k++; return sb.substring(k); } }
|