随笔分类 - 算法
刷题力扣
摘要:https://blog.csdn.net/lpq374606827/article/details/93203927 当List转化为数组时,如果想转化为二维数组: List<int[]> res = new ArrayList<>(); res.toArray(new int[res.size(
阅读全文
摘要:思路:我们需要维护当前每个链表没有被合并的元素的最前面一个,kk 个链表就最多有 kk 个满足这样条件的元素,每次在这些元素里面选取 val 属性最小的元素合并到答案中。在选取最小元素的时候,我们可以用优先队列来优化这个过程。 作者:LeetCode-Solution链接:https://leetc
阅读全文
摘要:https://leetcode-cn.com/problems/path-sum-ii/solution/yi-pian-wen-zhang-jie-jue-suo-you-er-cha-oo63/
阅读全文
摘要:https://blog.csdn.net/daocaokafei/article/details/117028198
阅读全文
摘要:直接看代码吧 class Solution {//和上一个打家劫舍差不多,唯一的区别是第一个和最后一个房子不能同时抢,所以比较[1,n-1]个房子的最大值,与[2,n]个房子的最大值 public int rob(int[] nums) {//copyOfRange函数易忘,闭区间拷贝出一个新的数组
阅读全文
摘要:思路: 首先,判断n是不是质数,只需要判断到n的平方根为止。 (2)质数的倍数一定不是质数。 class Solution {//求的是小于n的所有质数个数!!!! public int countPrimes(int n) {//如果到n的平方根为止n都找不到能整除自己的数,那么n一定是质数 bo
阅读全文
摘要:https://www.cnblogs.com/xiaozuoliunian/p/7784008.html
阅读全文
摘要:思路:滑动窗口法 受到 76 题 Minimum Window Substring 的启示,找一个范围使得其值满足某个条件,然后就会想到滑动窗口,也就是用双指针的方法。和这道题本质是一样的。 用双指针 left 和 right 表示一个窗口。 (1)ight 向右移增大窗口,直到窗口内的数字和大于等
阅读全文
摘要:方法:使用“快慢指针”思想找出循环:“快指针”每次走两步,“慢指针”每次走一步,当二者相等时,即为一个循环周期。此时,判断是不是因为1引起的循环,是的话就是快乐数,否则不是快乐数。注意:此题不建议用集合记录每次的计算结果来判断是否进入循环,因为这个集合可能大到无法存储;另外,也不建议使用递归,同理,
阅读全文
摘要:思路:直接排序,找中间元素就行 class Solution { public int majorityElement(int[] nums) { Arrays.sort(nums); return nums[nums.length/2]; } }
阅读全文
摘要:作者:LeetCode链接:https://leetcode-cn.com/problems/number-of-islands/solution/dao-yu-shu-liang-by-leetcode/来源:力扣(LeetCode)著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出
阅读全文
摘要:很简单,来个层次遍历,当遍历队列,遍历到刚开始遍历时,队列里最后一个数时(也就是遍历len-1次),得到的就是右视图的其中一个节点 /** * Definition for a binary tree node. * public class TreeNode { * int val; * Tree
阅读全文
摘要:直接看代码吧 class Solution { public int rob(int[] nums) { if(nums.length==0) return 0; if(nums.length==1) return nums[0]; if(nums.length==2) { if(nums[0]>n
阅读全文
摘要:方法一:直接遍历。从头到尾遍历,找最小值,时间复杂度o(n)。 class Solution { public int findMin(int[] nums) { int len=nums.length; int min=Integer.MAX_VALUE; for(int i=0;i<len;i+
阅读全文
摘要:思路:动态规划,假设当前最大值为imax,显然imax=Math.max(imax*nums[i],nums[i])。因为存在负数,那么会导致最大的变最小的,最小的变最大的。因此还需要维护当前最小值imin,imin = min(imin * nums[i], nums[i])当负数出现时则imax
阅读全文
摘要:思路:首先,反转后字符串前后不能有空格,所以说,要用一个函数去掉字符串前后的空格trim(), 之后,用split()函数,把原字符串按照空格分隔,成为一个字符串数组 https://www.cnblogs.com/Berryxiong/p/6232373.html 知识补充 String的spli
阅读全文
摘要:https://www.cnblogs.com/Berryxiong/p/6232373.html
阅读全文
摘要:元素要么出现一次,要么出现多次,首先Arrays.sort()进行排序,之后直接遍历就行,假如当前元素等于下标加一的元素,i=i+3;假如不等于,直接返回当前元素。当指针i到了最后一位,这一位一定是结果(这里容易写错) class Solution { public int singleNumber
阅读全文
摘要:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */
阅读全文
摘要:思路,首先,用函数去掉除了大小字母,数字之外的东西,用“”代替。 此外,要全部转换成小写, 之后双指针一前一后遍历就行 class Solution { public boolean isPalindrome(String s) {//大小写转换,看笔记 if(s.length()==0||s==n
阅读全文

浙公网安备 33010602011771号