![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
-=Leessang=-
努力怀挺!!!
展开
-
leetcode 204 计数质数(埃氏筛)
题目:返回小于 n 的质数的个数暴力class Solution { public int countPrimes(int n) { int ans = 0; for (int i = 2; i < n; ++i) { ans += isPrime(i) ? 1 : 0; } return ans; } public boolean isPrime(int x) { f原创 2020-12-03 17:08:37 · 100 阅读 · 0 评论 -
LeetCode 337. 打家劫舍 III (二叉树的动态规划)
打家劫舍一(前后相邻不能同时取) public int rob(int[] nums) { if(nums == null || nums.length == 0) return 0; if(nums.length == 1) return nums[0]; if(nums.length == 2) return Math.max(nums[0],nums[1]); int length = nums.length;原创 2020-10-17 17:44:22 · 272 阅读 · 0 评论 -
LeetCode 501. 二叉搜索树中的众数(Morris中序遍历)
Morris 中序遍历用 Morris 中序遍历的方法把中序遍历的空间复杂度优化到 O(1)Morris 中序遍历的一个重要步骤就是寻找当前节点的前驱节点,并且 Morris 中序遍历寻找下一个点始终是通过转移到 \rm rightright 指针指向的位置来完成的。如果当前节点没有左子树,则遍历这个点,然后跳转到当前节点的右子树。如果当前节点有左子树,那么它的前驱节点一定在左子树上,我们可以在左子树上一直向右行走,找到当前点的前驱节点。如果前驱节点没有右子树,就将前驱节点的 rig.原创 2020-09-25 15:06:09 · 136 阅读 · 0 评论 -
LeetCode 排列组合子集问题(回溯 + 剪枝)
46. 全排列(中等)class Solution { public List<List<Integer>> permute(int[] nums) { List<List<Integer>> list = new ArrayList<>(); if(nums == null || nums.length == 0){ return list; }原创 2020-09-13 16:33:22 · 148 阅读 · 0 评论 -
LeetCode 环形链表Ⅰ、Ⅱ(快慢指针)
环形链表Ⅰ:判断是否有环环形链表Ⅱ:找到第一个入环结点方法:快慢指针思路慢指针走了 n 步,达到入环结点,准备入环;此时快指针已在环内走了 n 步(假设环的长度大于 n);此时快指针距离入环结点还有 b 步远慢指针又走了 b 步;此时快指针走了 2b 步,与慢指针相遇;此时两指针距离入环结点有 n 步远问题一二都可以解决了 //问题一 public boolean hasCycle(ListNode head) { if (head == null || head.ne原创 2020-09-05 17:05:13 · 101 阅读 · 0 评论 -
LeetCode 836. 矩形重叠
注:坐标系y轴是向上的自己想到的 public boolean isRectangleOverlap(int[] rec1, int[] rec2) { int x1 = rec1[0], x2 = rec1[2], x3 = rec2[0], x4 = rec2[2]; int y1 = rec1[1], y2 = rec1[3], y3 = rec2[1], y4 = rec2[3]; boolean one = (x2>x3 &&a.原创 2020-08-26 11:54:07 · 88 阅读 · 0 评论 -
LeetCode 面试题 01.01. 判定字符是否唯一
实现一个算法,确定一个字符串 s 的所有字符是否全都不同。示例 1:输入: s = “leetcode”输出: false限制:0 <= len(s) <= 100如果你不使用额外的数据结构,会很加分。Set public boolean isUnique(String astr) { Set set = new HashSet(); for (int i = 0; i <astr.length() ; i++) {原创 2020-08-26 11:01:13 · 129 阅读 · 0 评论 -
LeetCode 496. 下一个更大元素 I (单调栈)
单调栈(官方题解)先忽略数组 nums1,先对将 nums2 中的每一个元素,求出其下一个更大的元素。将这些答案放入哈希映射(HashMap)中,再遍历数组 nums1,并直接找出答案。首先把第一个元素 nums2[1] 放入栈,随后对于第二个元素 nums2[2],如果 nums2[2] > nums2[1],那么我们就找到了 nums2[1] 的下一个更大元素 nums2[2],此时就可以把 nums2[1] 出栈并把 nums2[2] 入栈;如果 nums2[2] <=.原创 2020-08-24 15:51:46 · 122 阅读 · 0 评论 -
LeetCode 201. 数字范围按位与
给定范围 [m, n],其中 0 <= m <= n <= 2147483647,返回此范围内所有数字的按位与(包含 m, n 两端点)。示例 1:输入: [5,7]输出: 4朴素从 m 与 到 n,超出时间限制(m=0,n=21474…)规律可以将问题重新表述为:给定两个整数,我们要找到它们对应的二进制字符串的公共前缀简单的证明:假设对于所有这些二进制串,前 i 位均相同,第 i+1 位开始不同,由于 [m,n] 连续,所以第 i+1 位在 [m,n] 的数字范围从小到原创 2020-08-23 09:17:53 · 141 阅读 · 0 评论 -
LeetCode 258. 各位相加(模 9)
给定一个非负整数 num,反复将各个位上的数字相加,直到结果为一位数。输入: 38输出: 2解释: 各位相加的过程为:3 + 8 = 11, 1 + 1 = 2。 由于 2 是一位数,所以返回 2。进阶:你可以不使用循环或者递归,且在 O(1) 时间复杂度内解决这个问题吗?常规以下解法太尝龟了: public int addDigits(int num) { while(num>=10){ num=num/10+num%10; }原创 2020-08-20 09:25:41 · 282 阅读 · 0 评论 -
LeetCode 189. 旋转数组
暴力旋转 k 次 public void rotate(int[] nums, int k) { int temp, previous; for (int i = 0; i < k; i++) { previous = nums[nums.length - 1]; //每次取出最后一个元素 for (int j = 0; j < nums.length; j++) { tem.原创 2020-08-18 17:22:23 · 94 阅读 · 0 评论 -
LeetCode 1365. 有多少小于当前数字的数字
提示:2 <= nums.length <= 5000 <= nums[i] <= 100暴力法,双循环class Solution { public int[] smallerNumbersThanCurrent(int[] nums) { if(nums != null && nums.length > 0){ int[] ans = new int[nums.length]; //记录答案的数.原创 2020-08-16 17:27:30 · 92 阅读 · 0 评论 -
LeetCode 66. 加一
给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。示例 1:输入: [1,2,3]输出: [1,2,4]解释: 输入数组表示数字 123。巧解 public int[] plusOne(int[] digits) { for(int i=digits.length-1; i>=0; i--){ digits[i]+原创 2020-08-13 20:11:52 · 66 阅读 · 0 评论 -
二分查找小结
数据结构课程就有学习到二分法的思想和实现,但自己的动手实践太少,用二分法解题的练习也很少,但直到前段时间真正动手用二分法解题的时候才发现二分法里面的细节很多,边界条件很难把握,用 < 还是<= ,return left 还是 return right分不清。二分查找的一些细节:不要出现 else,而是把所有情况用 else if 写清楚,这样可以清楚地展现所有细节。计算 mid 时需要防止溢出,代码中 使用left + (right - left) / 2来代替 (left + r原创 2020-08-05 10:22:40 · 121 阅读 · 0 评论 -
LeetCode 461. 汉明距离 (布赖恩·克尼根算法)
两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。给出两个整数 x 和 y,计算它们之间的汉明距离。内置位计数功能class Solution { public int hammingDistance(int x, int y) { return Integer.bitCount(x ^ y); }}逐个移位class Solution { public int hammingDistance(int x, int y) { in原创 2020-08-01 14:59:22 · 262 阅读 · 0 评论 -
LeetCode 448. 找到所有数组中消失的数字
给定一个范围在 1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次。找到所有在 [1, n] 范围之间没有出现在数组中的数字。您能在不使用额外空间且时间复杂度为O(n)的情况下完成这个任务吗? 你可以假定返回的数组不算在额外空间内。示例:输入: [4,3,2,7,8,2,3,1]输出: [5,6]暴力(有点shadiao)class Solution { public List<Integer> findDisa原创 2020-08-01 12:51:25 · 120 阅读 · 0 评论