随笔分类 - 算法
刷题力扣
    
摘要:思路,要的是顺时针旋转九十度。 1.按照主对角线,做个对称。 [[1,2,3],[4,5,6],[7,8,9]] 变成:[[1,4,7],[2,5,8],[3,6,9]],这一步用二层循环就行了,n*n的矩阵,所以m.length==m[0].length,用哪个都行 2,竖着,左右两半来个轴对称,
        阅读全文
                
摘要:看到时间复杂度要求:O(logn),就知道是折半查找,很简单,先折半查找target的下标,之后向左右找nums[left],nums[right]等于target的下标,返回就行。 class Solution { public int[] searchRange(int[] nums, int 
        阅读全文
                
摘要:思路:很简单,两个指针cur1,cur2分别指向l1,l2,当cur1,cur2都不空时,比较两个指针指向的节点的数值,把小的那个接到结果res上,之后这个cur1/cur2后移 当这个循环结束后,有可能剩下一个没被遍历到的链表(因为两个链表长度可能不一样),所有再写俩循环就行。 class Sol
        阅读全文
                
摘要:可以利用replaceAll()函数实现目的,介绍可以看下面两个网址 https://www.runoob.com/java/java-string-replaceall.html https://www.cnblogs.com/lzh1043060917/p/12791689.html 把完整的括
        阅读全文
                
摘要:一个位置是否能接雨水,取决于这个下标a的左右两侧,是否存在比a的高度更高的下标。所以找到当前元素a能存多少水,步骤分两步 1.找到每个元素(头尾元素不算)左侧高度最高的下标L。和每个元素右侧高度最高的下标R。 2.找L与R的高度的最小值,假设左边更低 3.nums[L]如果大于nums[a],可以存
        阅读全文
                
摘要:时间复杂度可以满足,常数级别额外空间弄不出来。。。。 可以使用HashSet,因为找的是没排序的最小正整数,所以这样就行,先把每一个元素都add进HashSet,之后,从1开始,遍历1到nums.length+1的所有数字,如果这个数字i不在set里面,就说明缺这个数字。用Set。。。好像是怕有重复
        阅读全文
                
摘要:题目: 与上一题的不同: 1.在上一个“组合总和”中,每个元素可选择无数次,这个题里面,一个元素只能选一次。 2. 上一个题里,元素都不重复,这个题,元素可重复。 思路:和上一题差不多,回朔法。先排序。假如给出的数1,2,2,2。target==5;因为每个数只能选一次,所以要有一个数组visite
        阅读全文
                
摘要:思路: 思路:根据示例 1:输入: candidates = [2,3,6,7],target = 7。 候选数组里有 2 ,如果找到了 7 - 2 = 5 的所有组合,再在之前加上 2 ,就是 7 的所有组合;同理考虑 3,如果找到了 7 - 3 = 4 的所有组合,再在之前加上 3 ,就是 7 
        阅读全文
                
摘要:class Solution { public String countAndSay(int n) { String str,res;//res是对前一项的描述 就是结果,每个数的描述都是从“”生产的,所以要一个str记录一下上一个对前一项的描述 res="1"; for(int i=1;i<n;i
        阅读全文
                
摘要:假如链表长度为5,有1,2,3,4,5五个元素,删除倒数第2个元素4。5-2=3,也就是指向被删除的元素的上一个元素,正好。 正确做法:多次循环: class Solution { public ListNode removeNthFromEnd(ListNode head, int n) { Li
        阅读全文
                
摘要:和三数之和太像了,无非是多了一个循环,求1,2,3,4个数的和等于target的所有不重复集合。第3,4个数那里还可以用双指针法 不同点:先排序,这里和三数之和一样,这里可以加入当前最小值,最大值的判断,减少运算次数,如果当前最小值大于target直接break,因为随着指针右移,四数之和只会越来越
        阅读全文
                
摘要:可以看出,假如输入的有两个数字,得用两层循环得出结果。假如输入三个数字,就得是三层循环。可以用递归 class Solution {//递归, public List<String> letterCombinations(String digits) { List<String> list = ne
        阅读全文
                
摘要:给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。 例如,给定数组 nums = [-1,2,1,-4], 和 target = 1. 与 target 最接近的三
        阅读全文
                
摘要:给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。 注意:答案中不可以包含重复的三元组。 给定数组 nums = [-1, 0, 1, 2, -1, -4], 满足要求的三元组集合为:
        阅读全文
                
摘要:class Solution { public int[] plusOne(int[] digits) {//因为是加一,所以进位只可能是1 int length=digits.length; for(int i=length-1;i>=0;i--) { if(digits[i]!=9)//如果当前
        阅读全文
                
摘要:方法: 这题的做法大概是这样: 去掉前导空格 再是处理正负号 识别数字,注意越界情况。 这道题目如果只是简单地字符串转整数的话,就是简单地rev=rev*10+pop。 但是注意这道题目可能会超过integer的最大表示! 也就是说会在某一步(1)rev*10+pop> Integer.MAX_VA
        阅读全文
                
摘要:思路: 1.首先要有一个列表rows存储所有的数据,列表里每一个元素代表题中的一行,每一行里面的元素都是不断往里面加进去的,不是初始化好的。所以列表的每个元素,也就是每一行,应该用StringBuilder。按照题意rows总共numRows行,下标是0到numRows-1 2.其次,在边界处如何处
        阅读全文
                
摘要:思路:暴力法的改进 class Solution { public String longestPalindrome(String s) { if(s==null||s.length()==0)return s ; int length=s.length(); boolean[][] P=new b
        阅读全文
                
摘要:题目内容: 题目解析:也就是说,用一个数组来表示一个数,数组最右边是个位。找到大于这个数的另一个数b,这个数b不仅要大于给出的数,还要尽可能小。 方法: 1.题目是找出大于当前数的最小的那个数。假如从左到右,数字按降序走,则一定不可能有更大的数。因为从左到右降序的话,数字一定是最大的。2.所以说,应
        阅读全文
                
摘要:内容: 解法这样,首先肯定得排序, 算法流程:特判,对于数组长度 nn,如果数组为 nullnull 或者数组长度小于 33,返回 [][]。对数组进行排序。遍历排序后数组:若 nums[i]>0nums[i]>0:因为已经排序好,所以后面不可能有三个数加和等于 00,直接返回结果。对于重复元素:跳
        阅读全文
                
                    
                
浙公网安备 33010602011771号