力扣
小菜鸟小样儿~
这个作者很懒,什么都没留下…
展开
-
力扣第316题“去除重复字母”的解题思路
参考代码:class Solution { public String removeDuplicateLetters(String s) { Stack<Character> stack = new Stack<>(); //数组seen记录当前栈中已经存在的字符,如果后续再遇到可以直接跳过 boolean[] seen = new boolean[26]; //last_occurrence 记录字符串中原创 2022-03-24 23:28:28 · 614 阅读 · 0 评论 -
力扣第313题“超级丑数”的解题思路
参考代码:class Solution { public int nthSuperUglyNumber(int n, int[] primes) { int[] dp=new int[n]; dp[0]=1; int[] index=new int[primes.length]; for(int i=1;i<n;i++){ int min=Integer.MAX_VALUE;原创 2022-03-24 21:17:00 · 275 阅读 · 0 评论 -
力扣第309题“最佳买卖股票时机含冷冻期”的解题思路
参考代码:class Solution { public int maxProfit(int[] prices) { int n=prices.length; if(n==0)return 0; int[] hold=new int[n]; hold[0]=-prices[0]; int[] notHold=new int[n]; for(int i=1;i<n;i++){原创 2022-03-22 23:05:00 · 253 阅读 · 0 评论 -
力扣第338题“比特位计数”的解题思路
参考代码: class Solution{public int[] countBits(int num) { int[] res = new int[num + 1]; for(int i = 1;i<= num;i++){ //注意要从1开始,0不满足 res[i] = res[i & (i - 1)] + 1; } return res; }}大致思路:找到数组中当前的i的二原创 2022-03-18 23:16:26 · 188 阅读 · 0 评论 -
力扣第300题“最长递增子序列”的解题思路
方法一:动态规划参考代码:class Solution { public int lengthOfLIS(int[] nums) { if(nums.length == 0) return 0; int[] dp = new int[nums.length]; int res = 0; Arrays.fill(dp, 1); for(int i = 0; i < nums.length; i++) {原创 2022-03-18 22:28:27 · 712 阅读 · 0 评论 -
力扣第299题“猜数字游戏”的解题思路
参考代码:class Solution { public String getHint(String secret, String guess) { int[] nums = new int[10]; int m=0,n=0; for(int i=0;i<guess.length();i++){ if(secret.charAt(i)==guess.charAt(i)){ m++;原创 2022-03-16 23:47:37 · 3442 阅读 · 0 评论 -
力扣第292题“Nim游戏”的解题思路
参考代码:class Solution { public boolean canWinNim(int n) { if(n%4==0){ return false; } return true; }}大致思路:先自己判断一下5、6、7、8是true还是false,会发现8那里是false,在自己推理的过程中就会发现,凡是碰到4的倍数,先手的一定会输,你拿N根对手就会拿4-N根,保证每回合共减4根,你永远是4原创 2022-03-16 20:51:23 · 2911 阅读 · 0 评论 -
力扣第290题“单词规律”的解题思路
参考代码:class Solution { public boolean wordPattern(String pattern, String s) { String[] words = s.split(" "); if (words.length != pattern.length()) { return false; } Map<Object, Integer> map = new Hash原创 2022-03-15 22:49:54 · 415 阅读 · 0 评论 -
力扣第287题“寻找重复数”的解题思路
参考代码:class Solution { public int findDuplicate(int[] nums) { int len = nums.length; int left = 1; int right = len - 1; while (left < right) { int mid = left + (right - left) / 2;原创 2022-03-14 23:10:54 · 553 阅读 · 0 评论 -
力扣第283题“移动零”的解题思路
参考代码: public void moveZeroes(int[] nums) { if (nums == null || nums.length <= 1) { return; } int index = 0; for (int i = 0; i < nums.length; i++) { if (nums[i] != 0) { nums[in原创 2022-03-11 23:27:03 · 373 阅读 · 0 评论 -
力扣第279题“完全平方数”的解题思路
参考代码:class Solution { public int numSquares(int n) { while(n % 4 == 0) n /= 4; if(n % 8 == 7) return 4; for(int i = 0; i * i <= n; ++i) { if(n - i * i == 0) return 1; } for(int i = 0; i * i原创 2022-03-10 22:25:04 · 254 阅读 · 0 评论 -
力扣第278题“第一个错误的版本”的解题思路
参考代码: public class Solution extends VersionControl { public int firstBadVersion(int n) { int lo = 1; int hi = n; while(lo < hi) { int mid = lo + (hi - lo) / 2; if (isBadVersion(mid)) {原创 2022-03-09 23:22:37 · 198 阅读 · 0 评论 -
力扣第274题“H指数”的解题思路
参考代码:class Solution { public int hIndex(int[] citations) { Arrays.sort(citations); int h = 0, i = citations.length - 1; while (i >= 0 && citations[i] > h) { h++; i--; }原创 2022-03-08 22:53:26 · 355 阅读 · 0 评论 -
力扣第268题“丢失的数字”的解题思路
参考代码:class Solution { public int missingNumber(int[] nums) { int res = nums.length; for(int i = 0; i < nums.length; i++){ res ^= nums[i] ^ i; } return res; }}大致思路:由位运算符中异或的性质:0 ^ 4 = 4 4 ^ 4原创 2022-03-07 22:54:46 · 170 阅读 · 0 评论 -
力扣第264题“丑数二”的解题思路
参考代码:class Solution { public int nthUglyNumber(int n) { int n2 = 0,n3 = 0,n5 = 0; int[] dp = new int[n]; dp[0] = 1; for(int i = 1;i<n;i++){ dp[i] = Math.min(2*dp[n2],Math.min(3*dp[n3],5*dp[n5]));原创 2022-03-06 22:00:24 · 171 阅读 · 0 评论 -
力扣第263题“丑数”的解题思路
参考代码:class Solution { public boolean isUgly(int n) { if(n==1){ return true; } if(n<=0){ return false; } while (n%5==0){ n/=5; } while (n%3==0){原创 2022-03-04 23:01:10 · 127 阅读 · 0 评论 -
力扣第260题“只出现一次的数字三”的解题思路
参考代码:class Solution { public int[] singleNumber(int[] nums) { int xor = 0; for (int num : nums) { xor ^= num; } int mask = xor & (-xor); int[] ans = new int[2]; for (int num : nu原创 2022-03-02 22:52:29 · 186 阅读 · 0 评论 -
第258题“各位相加”的解题思路
参考代码:class Solution { public int addDigits(int num) { if(num==0){ return 0; } while(num>=10){ int sum=0; while(num>0){ int a=num%10; num=num/10;原创 2022-03-01 22:00:09 · 75 阅读 · 0 评论 -
第257题“二叉树的所有路径”的解题思路
参考代码:class Solution { private List<String>res=new ArrayList<>(); public List<String> binaryTreePaths(TreeNode root) { dfs(root,new StringBuilder()); return res; } private void dfs(TreeNode root,Str原创 2022-02-28 22:29:34 · 198 阅读 · 0 评论 -
力扣第242题“有效的字母异位词”的解题思路
参考代码:class Solution { public boolean isAnagram(String s, String t) { int[] count = new int[26]; for(int i = 0; i < s.length(); i++){ count[s.charAt(i) - 'a']++; } for(int i = 0; i < t.length(); i++){原创 2022-02-23 21:05:59 · 264 阅读 · 0 评论 -
力扣第240题“搜索二维矩阵二”的解题思路
参考代码:class Solution { public boolean searchMatrix(int[][] matrix, int target) { if (matrix == null || matrix.length == 0) return false; int m = 0; int n = matrix[0].length - 1; while (m < matrix.length && n原创 2022-02-23 20:29:23 · 288 阅读 · 0 评论 -
力扣第238题“除自身以外的数组的乘积”的解题思路
参考代码:class Solution { public int[] productExceptSelf(int[] nums) { if (nums == null || nums.length == 0) { return new int[0]; } int len = nums.length; int[] res = new int[len]; int left =原创 2022-02-22 20:02:49 · 248 阅读 · 0 评论 -
力扣第237题“删除链表中的节点”的解题思路
参考代码:class Solution { public void deleteNode(ListNode node) { node.val=node.next.val; node.next=node.next.next; }}一般的删除节点我们可以用head->next->val去判断下一个是否是删除的节点,然后head->next=head->next->next,而此题中node就是我们需要删除的节点,所以我们可原创 2022-02-22 18:23:08 · 250 阅读 · 0 评论 -
力扣第236题“二叉树的最近公共先祖”的解题思路
参考代码:class Solution { public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) { if (root == null) { return root; } if (root == p || root == q) { return root; } TreeN原创 2022-02-21 20:35:32 · 186 阅读 · 0 评论 -
力扣第235题“二叉搜索树的最近公共先祖”的解题思路
参考代码:class Solution { public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) { while (true) { if (root.val > p.val && root.val > q.val) { root = root.left; } else if原创 2022-02-21 18:59:10 · 346 阅读 · 0 评论 -
力扣第231题“回文链表”的解题思路
参考代码:class Solution { public boolean isPalindrome(ListNode head) { if (head.next == null){ return true; } ListNode slow = head; ListNode fast = head.next; while (fast.next != null && fast.n原创 2022-02-18 21:44:05 · 215 阅读 · 0 评论 -
力扣第231题“2的幂”的解题思路
参考代码:class Solution { public boolean isPowerOfTwo(int n) { if(n < 1 ){ return false; } while(n % 2 == 0){ n /= 2; } return n == 1; }}主要是分几种情况,首先小于1的不可能为2的幂。然后是大于一的:第一种能整除2的,原创 2022-02-17 18:57:35 · 281 阅读 · 0 评论 -
力扣第228题“汇总区间”的解题思路
参考代码:class Solution { public List<String> summaryRanges(int[] nums) { List<String> ans = new ArrayList<String>(); int numsLen = nums.length; int front = 0; while(front < numsLen) { StringBuilder sb = new S原创 2022-02-16 19:57:37 · 124 阅读 · 0 评论 -
力扣第191题“位1的个数”的解题思路
参考代码:public class Solution { // you need to treat n as an unsigned value public int hammingWeight(int n) { int a=0; int count=0; for(int i=0;i<32;i++){ a=n&1; if(a==1){ count原创 2022-02-15 17:18:10 · 224 阅读 · 0 评论 -
力扣第190题“颠倒二进制位”的解题思路
参考代码:public class Solution { public int reverseBits(int n) { int ret = 0; int count = 32; while (count-- > 0) { int lastBit = n & 1; ret = ret << 1 | lastBit; n = n >>原创 2022-02-14 20:30:51 · 424 阅读 · 0 评论 -
力扣第171题“Excel表列序号”的解题思路
参考代码:public int titleToNumber(String s) { char[] charArray = s.toCharArray(); int res = 0; for(int i = 0; i < charArray.length; i++) { res = res*26 + (charArray[i] - 'A' + 1); } return res;原创 2022-02-11 19:09:55 · 325 阅读 · 0 评论 -
力扣第169题“多数元素”的解题思路
参考代码:class Solution{public int majorityElement(int[] nums) { int count = 1; int maj = nums[0]; for (int i = 1; i < nums.length; i++) { if (maj == nums[i]) count++; else { count--; if (count == 0) { maj = nums[i + 1];原创 2022-02-09 20:01:23 · 103 阅读 · 0 评论 -
力扣第168题“Excel表列名称”的解题思路
参考代码:class Solution { public string convertToTitle(int columnNumber) { string result; while(columnNumber>0) { int current=(columnNumber-1)%26; columnNumber=(columnNumber-1)/26; char c原创 2022-01-28 18:59:14 · 781 阅读 · 0 评论 -
第167题“两数之和二”的解题思路
参考代码:class Solution { public int[] twoSum(int[] numbers, int target) { for (int i = 0, j = numbers.length - 1; i < j;) { int sum = numbers[i] + numbers[j]; if (sum == target) return new int[] {i + 1, j + 1};原创 2022-01-27 17:36:17 · 294 阅读 · 0 评论 -
力扣第155题“最小栈”的解题思路
参考代码:class MinStack { private Stack<Integer> stack; private Stack<Integer> min_stack; public MinStack() { stack = new Stack<>(); min_stack = new Stack<>(); } public void push(int x) { s原创 2022-01-26 19:12:33 · 287 阅读 · 0 评论 -
力扣第145题“二叉树的后序遍历”的解题思路
参考代码:class Solution { public List<Integer> postorderTraversal(TreeNode root) { List<Integer> res = new ArrayList<Integer>(); if (root == null) { return res; } Deque<TreeNode> stack原创 2022-01-25 20:16:41 · 259 阅读 · 0 评论 -
力扣第144题“二叉树的前序遍历”的解题思路
参考代码:class Solution { public List<Integer> preorderTraversal(TreeNode root) { List<Integer> res = new ArrayList<>(); Stack<TreeNode> stack = new Stack<>(); while (root != null || !stack.isEmpty()原创 2022-01-24 17:45:41 · 250 阅读 · 0 评论 -
力扣第141题“环形链表”的解题思路
参考代码:public class Solution { public boolean hasCycle(ListNode head) { ListNode fast=head; ListNode slow=head; while(fast!=null&&fast.next!=null){ fast = fast.next.next; slow=slow.next;原创 2022-01-21 16:32:45 · 374 阅读 · 0 评论 -
力扣第136题“只出现一次的数字”的解题思路
参考代码:class Solution { public int singleNumber(int[] nums) { int res = 0; for (int num : nums) { res = res ^ num; } return res; }}位运算,每个元素依次异或。i ^ 0 = i;i ^ i = 0;且异或满足交换律和结合律。所有依次异或最终留下的即原创 2022-01-20 18:11:04 · 406 阅读 · 0 评论 -
力扣第125题“验证回文串”的解题思路
参考代码:class Solution { public boolean isPalindrome(String s) { char[] w=s.toCharArray(); int i=0;int j=w.length-1; for(int k=0;k<w.length;k++){ if(w[k]>='A'&&w[k]<='Z'){ w[k]=(char)原创 2022-01-19 18:52:07 · 468 阅读 · 0 评论