0ms专题

78.子集 0ms

经典回溯,推荐下代码随想录的讲解,回溯我看的他的讲解,易懂 收集问题和分割、组合问题的不同,就是要在终止条件上面添加个,不然会漏掉自己 class Solution {List<List<Integer>> result = new ArrayList<>();LinkedList<Integer> path = new LinkedList<>();public List<List<Integ

75.颜色分类。双百0ms

评论区看到的一个方法,太妙了…只能说我怎么可能都想不到的题,只能进行记录了 三个指针num1、num2、num3将数组nums分成了3个分区,从左往右依次存储0、1、2。三个指针分别指向各自分区的尾部。 从左到右遍历数组nums,(1)如果nums[i]=0,则nums1、nums2都后移一个位置,给新来的0腾地方。(2)如果是nums[i]=1,同样,nums2都后移一个位置,给新来的1腾地

213.打家劫舍Ⅱ,简单易懂0ms

分享一个容易理解的方式,搞两个dp数组。 class Solution {public int rob(int[] nums) {int len = nums.length;if(len == 1) return nums[0];int[] dp1 = new int[len + 1];// 不抢第一个int[] dp2 = new int[len + 1];// 抢第一个dp1[1] = 0;

474.一和零。01背包。详细注释版0ms

class Solution {public int findMaxForm(String[] strs, int m, int n) {if (strs.length == 0) return 0;int[][] dp =new int[m+1][n+1];//strs 数组里的元素就是物品,m和n是背包,二维的背包// 遍历物品,字符串中有各个字符for(String s :strs) {in

860.柠檬水找零 0ms

简单的逻辑题 class Solution {public boolean lemonadeChange(int[] bills) {// 逻辑题if(bills == null || bills.length<1){return true;}int five = 0;int ten = 0;for(int i=0;i<bills.length;i++){if(bills[i] == 5){fi

73.矩阵置0,简单易懂注释版0ms

class Solution {// 第一行第一列用来记录有0的位置(映射到第一行第一列)public void setZeroes(int[][] matrix) {int m = matrix.length, n = matrix[0].length;boolean flagCol = false, flagRow = false;// 找到第一行和第一列中是否有0for(int i = 0;

剑指offer54.二叉搜索树的第K大节点。几行0ms

第K大,所以右根左;第K小才是左根右 class Solution {int count = 0, result = 0;public int kthLargest(TreeNode root, int k) {dfs(root, k);return result;}public void dfs(TreeNode root, int k){if(root.right != null) dfs(

剑指offer46.把数字翻译成 字符串。简单易懂注释版0ms

class Solution {public int translateNum(int num) {if (num == 0) return 1;//只有一个areturn f(num);}public int f(int num){//只有一个字母,找到一种if (num < 10) return 1;// 证明两个余数可以组成一个字母,并且余数不是以0开头,// 因为余数大于等于10,表明下次

剑指offer33.二叉搜索树的后序遍历序列。简单易懂0ms

class Solution {public boolean verifyPostorder(int[] postorder) {return dfs(postorder, 0, postorder.length - 1);}boolean dfs(int[] postorder, int left, int right){if(left >= right) return true;// 搜索树的

剑指offer 26.树的子结构。简单易懂0ms

class Solution {public boolean isSubStructure(TreeNode A, TreeNode B) {if(B == null || A == null) return false;if(A.val == B.val && dfs(A.left, B.left) && dfs(A.right, B.right)) return true;// 判断B在左子树

264.丑数Ⅱ。简单易懂,代码简单0ms

// 后面的丑数一定由前面的丑数乘以2,或者乘以3,或者乘以5得来。// 例如,8,9,10,12一定是1, 2, 3, 4, 5, 6乘以2,3,5三个质数中的某一个得到。// 从第一个丑数开始,一个个数丑数,并确保数出来的丑数是递增的,直到数到第n个丑数,得到答案// 1, 2, 3, 4, 5, 6中的每一个丑数都有一次机会与2相乘,一次机会与3相乘,一次机会与5相乘(一共有18次机会

剑指offer59.Ⅰ滑动窗口的最大值。简单易懂注释版0ms

class Solution {public int[] maxSlidingWindow(int[] nums, int k) {if(nums == null || nums.length == 0) return new int[0];int[] result = new int[nums.length - k + 1];Deque<Integer> queue = new ArrayDeq

剑指offer31.栈的压入、弹出序列。简单易懂0ms

class Solution {public boolean validateStackSequences(int[] pushed, int[] popped) {Deque<Integer> stack = new ArrayDeque();int j = 0;// j当作popped的指针,判断当前是否是弹出的数值for(int push : pushed){stack.push(push)

645.错误的集合。哈希表0ms

// 哈希中出现2次的是重复元素,未出现的则是缺失元素,返回这两个即可 class Solution {public int[] findErrorNums(int[] nums) {// 哈希中出现2次的是重复元素,未出现的则是缺失元素,返回这两个即可int len = nums.length;int[] count = new int[len + 1];for(int num : nums

594.最长和谐子序列。滑动窗口0ms

class Solution {// 滑动窗口public int findLHS(int[] nums) {Arrays.sort(nums);int left = 0, res = 0;for(int right = 0; right < nums.length; right++){while(nums[right] - nums[left] > 1){++left;}if(nums[righ