classSolution{publicintfirstMissingPositive(int[] nums){// 1. 排序遍历:O(n*logn) O(1)// 2. HashSet:O(n) O(n)// 3. 数组转化成逻辑上的哈希表,nums[i] = i + 1:还是需要再理解理解for(int i =0; i < nums.length; i++){// 把当前值交换到应当的位置,由于当前值更新,继续这个过程,直到当前值就是正确位置 // 或当前值超出范围// 第三个判断条件:考虑重复值while(nums[i]>0&& nums[i]<= nums.length && nums[i]!= nums[nums[i]-1]){int temp = nums[nums[i]-1];nums[nums[i]-1]= nums[i];nums[i]= temp;}}// 在建立好的逻辑上哈希表上,遍历找到答案for(int i =0; i < nums.length; i++){if(nums[i]!= i +1){return i +1;}}// 边界,全都满足的情况。return nums.length +1;}}
无注释版
核心思路:还是构建哈希表,while循环是关键
classSolution{publicintfirstMissingPositive(int[] nums){for(int i =0; i < nums.length; i++){while(nums[i]>0&& nums[i]<= nums.length && nums[i]!= nums[nums[i]-1]){int temp = nums[nums[i]-1];nums[nums[i]-1]= nums[i];nums[i]= temp;}}for(int i =0; i < nums.length; i++){if(nums[i]!= i +1){return i +1;}}return nums.length +1;}}
文章目录题目描述思路 & 代码题目描述
挺简单的,直接看思路代码吧。
思路 & 代码
就是一个层序遍历,取每层的最右边结点即可
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* T…
文章目录题目描述思路 & 代码更新版题目描述
本质:找满足 k * k < x 的最大 k
思路 & 代码
二分,对满足 k * k < x 的最大 k进行查找。注意极端数据,用 long暴力法先来一个
class Solution {public int mySqrt(int x) {in…
文章目录路径总和 I路径总和 II比较简单,就连着一起写了 路径总和 I
注意:一定得走到叶子才算 直接看代码吧,注释也就几行。
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* T…