力扣
思路
千鸟送天
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
NC97 字符串出现次数的TopK问题
import java.util.*;public class Solution {/*** return topK string* @param strings string字符串一维数组 strings* @param k int整型 the k* @return string字符串二维数组*/ public String[][] topKstrings (String[] strings, int k) { // write code here i..原创 2021-09-11 10:32:34 · 303 阅读 · 0 评论 -
最大子矩阵和
package com.leetcode;import java.util.Scanner;public class Main11 { public static void main(String[] args) { Scanner sc=new Scanner(System.in); int matrix[][]={{0,-2,-7,0 },{9 ,2 ,-6 ,2},{-4,1,-4,1},{-1,8,0,-2}}; maxSum(matr原创 2021-09-11 09:57:34 · 369 阅读 · 0 评论 -
验证回文字符串2
class Solution { public boolean validPalindrome(String s) { int left = 0; int right = s.length() - 1; while(left < right) { char l = s.charAt(left); char r = s.charAt(right); if(..原创 2021-08-08 20:17:35 · 394 阅读 · 0 评论 -
算法-动态规划-乘积最大子数组
这个题有符号,所以不好搞class Solution { public int maxProduct(int[] nums) { if(nums == null || nums.length == 0) { return 0; } int len = nums.length; int[] maxF = new int[len]; int[] minF = new int[len]; ...原创 2021-03-06 16:45:58 · 134 阅读 · 0 评论 -
算法-动态规划-打家劫舍
分析既然是动态规划,就要写出状态转移方程,如果只有一间房子,直接偷,金额肯定最大,如果两间房子,偷里面金额最大的一间房,用一个数字dp[k]表示从0到k号房子中偷取金额的最大值,如果第k号房子偷,则dp[k]=nums[k]+dp[k-2],如果不偷dp[k]=dp[k - 1],所以dp[k]=max{dp[k-1], nums[k]+dp[k - 2]}边界条件可以根据状态转移方程得出要求dp[0]和dp[1],显然dp[0]=nums[0],dp[1] = max{nums[0], nums[.原创 2021-03-06 15:33:49 · 117 阅读 · 0 评论 -
算法-动态规划-单词拆分
分析一个单词从中间切多刀,其实就可以看成只切了两刀,不过前面一段可以继续切,后面一段不可以继续切,就和我之前总结切绳子是一个道理,如果前面一段可以找到(这里其实可以继续分,只要分割后的几段也能在集合中找到也算是找的到),后面这一段也可以找到,拼接在一起后,就一定可以满足要求,可以用一个数组dp[j]表示0到j-1这个字符串存不存在(即使是分割后),只要这个字符串存在dp[j],s.substring(j, i)也存在,就表示这个字符串可以class Solution { public bool.原创 2021-03-06 14:32:27 · 254 阅读 · 0 评论 -
URL缓存机制
class LRUCache { class Node { int key; int value; Node pre; Node post; public Node() {} public Node(int key, int value) { this.key = key; this.value = value; } } .原创 2021-03-04 15:18:21 · 480 阅读 · 2 评论 -
算法-动态规划-剪绳子
向这种求最值一般用到动态规划用一个数组dp[n]表示长度为n的绳子分成m段乘积的最大值分析:和那个青蛙跳台阶有点像,青蛙一次可以跳一阶、二阶,所以青蛙第一次跳一阶后,剩下有n-1个台阶有dp[n-1]种跳法,第一次跳2阶,剩下的n-2阶有dp[n-2]种跳法,结合这两者可得,青蛙跳n个台阶有dp[n] = dp[n - 1] + dp[n - 2]。对于剪绳子来说,我可以把它只剪一刀的长度k,那么剩下的长度就为n-k, 如果剩下的n-k不剪就是k*(n-k),如果剩下的绳子剪就是k*dp[n-k],.原创 2021-03-03 21:09:58 · 158 阅读 · 1 评论 -
算法-字符串-字符串相加
此题与链表相加有异曲同工之妙class Solution { public String addStrings(String num1, String num2) { if(num1 == "0") { return num2; } if(num2 == "0") { return num1; } int i = num1.length() - 1; .原创 2021-02-04 21:40:21 · 350 阅读 · 0 评论 -
算法-字符串-生成括号
class Solution { List<String> ret; public List<String> generateParenthesis(int n) { ret=new ArrayList<>(); dfs(n,"",0,0); return ret; } //要保证字符串里面左括号数要大于等于右括号数 l为字符串左括号数 r为右括号数 public void df.原创 2021-02-04 20:36:57 · 215 阅读 · 0 评论 -
算法-字符串-滑动窗口-无重复字符串的最长字串
class Solution { public int lengthOfLongestSubstring(String s) { Set<Character> set = new HashSet<>(); int len = s.length(); int l = 0; int r = 0; int ans = 0; //滑动窗口可以按照这个套 while(l .原创 2021-02-04 19:22:44 · 115 阅读 · 0 评论 -
算法-字符串-有效的括号
这种判断成对的就用栈比较好class Solution { public boolean isValid(String s) { if(s.length() % 2 == 1) {//括号为奇数 return false; } Stack<Character> stack = new Stack<>(); //用map来保存括号对 用来判断很方便 Map<..原创 2021-02-03 16:45:22 · 186 阅读 · 0 评论 -
算法-字符串-最长回文子串
class Solution { public String longestPalindrome(String s) { if(s == null || s.length() < 1) { return ""; } int start = 0, end = 0; for(int i = 0; i < s.length(); i++) { int len1 = help(s,.原创 2021-02-03 15:45:44 · 108 阅读 · 0 评论 -
算法-动态规划-完全平方数
求最值,最优解问题一般用到动态规划class Solution { public int numSquares(int n) { int[] dp = new int[n + 1]; Arrays.fill(dp, Integer.MAX_VALUE);//将数组中的每个值都填上最大整数 dp[0] = 0; dp[1] = 1; int maxIndex = (int)Math.sqrt(n.原创 2021-02-03 13:51:37 · 169 阅读 · 0 评论 -
算法-树-二叉树展开为链表
方法一 哈希表/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode ..原创 2021-02-01 17:57:13 · 114 阅读 · 0 评论 -
算法-树-二叉搜索树的最近公共祖先
此题前面有类似的题目 不过改为搜索树/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { public TreeNode lowestCommonAncestor(..原创 2021-02-01 17:15:39 · 81 阅读 · 0 评论 -
算法-树-对称的二叉树
方法一 递归/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode ri..原创 2021-02-01 16:18:54 · 113 阅读 · 0 评论 -
算法-树-二叉树的最近公共祖先
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { public TreeNode lowestCommonAncestor(TreeNode root, TreeNo..原创 2021-02-01 14:27:44 · 111 阅读 · 0 评论 -
算法-树-平衡二叉树
方法一 自底向上/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNo...原创 2021-01-31 18:38:42 · 113 阅读 · 0 评论 -
算法-树-二叉树的右视图
使用二叉树层序遍历的思想 并用size来记录每一层的节点个数,当size==1时就是每一层的最后一个/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * .原创 2021-01-31 16:22:43 · 161 阅读 · 0 评论 -
算法-树-修剪二叉树
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) {...原创 2021-01-31 15:47:56 · 333 阅读 · 0 评论 -
算法-树-最大二叉树
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) {...原创 2021-01-31 15:26:48 · 197 阅读 · 0 评论 -
算法-树-不同的二叉搜索树
class Solution { public List<TreeNode> generateTrees(int n) { if (n == 0) { return new LinkedList<TreeNode>(); } return generateTrees(1, n); } public List<TreeNode> generateTrees(int st...原创 2021-01-31 10:54:51 · 139 阅读 · 0 评论 -
算法-字符串-判断子序列
class Solution { public boolean isSubsequence(String s, String t) { int m = s.length(); int n = t.length(); int i = 0; int j = 0; while(i < m && j < n) { if(s.charAt(i) == t.charAt(j..原创 2021-01-31 10:52:50 · 409 阅读 · 0 评论 -
算法-树-重建二叉树
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { .原创 2021-01-30 21:24:55 · 102 阅读 · 0 评论 -
算法-二叉树-相同的树
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { .原创 2021-01-30 20:53:56 · 152 阅读 · 0 评论 -
算法-树-将有序数组转化为二叉搜索树
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { .原创 2021-01-30 20:11:40 · 108 阅读 · 0 评论 -
二叉树的遍历
package com.chenjian;import java.util.Stack;import java.util.HashMap;public class BinTree { private char date; private BinTree lchild; private BinTree rchild; public BinTree(char c) { date = c; } // 先序遍历递归 public原创 2021-01-30 18:21:22 · 80 阅读 · 0 评论 -
算法-树-二叉搜索树迭代器
哈希表法 先中序遍历搜索树 然后将值放进数组,然后一个一个取出来/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val..原创 2021-01-30 17:18:04 · 133 阅读 · 0 评论 -
算法-树-合并二叉树
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { public TreeNode mergeTrees(TreeNode t1, TreeNode t2) { ..原创 2021-01-30 16:41:13 · 137 阅读 · 0 评论 -
算法-树-不同的二叉搜索树
class Solution { public int numTrees(int n) { int[] G = new int[n + 1]; G[0] = 1; G[1] = 1; for(int k = 2; k <= n; k++) { for(int i = 1; i <= k; i++) { G[k] += G[i - 1] * G[k - i];...原创 2021-01-30 14:43:31 · 86 阅读 · 0 评论 -
算法-树-反转二叉树
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { .原创 2021-01-29 18:34:05 · 164 阅读 · 0 评论 -
算法-树-二叉树的最大深度
方法一 递归/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode r.原创 2021-01-29 17:59:16 · 113 阅读 · 1 评论 -
算法-双指针-删除排序数组中重复的项
感觉这题 不是很好class Solution { public int removeDuplicates(int[] nums) { if(nums.length == 0) { return 0; } int i = 0; for(int j = 1; j < nums.length; j++) { if(nums[i] != nums[j]) { .原创 2021-01-28 14:18:58 · 143 阅读 · 0 评论 -
算法-双指针-最接近的三个数之和
排序+双指针class Solution { public int threeSumClosest(int[] nums, int target) { Arrays.sort(nums); int best = 100000000; for(int i = 0; i < nums.length; i++) { if(i > 0 && nums[i] == nums[i - 1]) { .原创 2021-01-28 13:39:57 · 118 阅读 · 0 评论 -
算法-双指针-移动零
方法一 哈希表将不为0的数保存起来 然后放进数组class Solution { public void moveZeroes(int[] nums) { List<Integer> list = new ArrayList<>(); for(int i = 0; i < nums.length; i++) { if(nums[i] != 0) { list.add(num.原创 2021-01-28 12:52:47 · 142 阅读 · 0 评论 -
算法-双指针-反转字符串
class Solution { public void reverseString(char[] s) { int l = 0; int r = s.length - 1; while(l < r) { char temp = s[l]; s[l] = s[r]; s[r] = temp; l++; r--; .原创 2021-01-27 13:03:17 · 251 阅读 · 0 评论 -
算法-双指针-盛最多水的容器
方法一 双指针class Solution { public int maxArea(int[] height) { int l = 0; int r = height.length - 1; int ans = 0; while(l < r) { int a = Math.min(height[l], height[r]) * (r - l); ans = Math.max..原创 2021-01-27 12:45:43 · 130 阅读 · 0 评论 -
算法-链表-重排链表
方法一 哈希表+双指针/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int val, ListNode next) { this.val = val; this.next = .原创 2021-01-26 22:13:54 · 161 阅读 · 0 评论 -
算法-链表-两数相加
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */class Solution { public ListNode addTwoNumbers(ListNode l1, ListNode l2) { //因为链表是逆序的 不好加 .原创 2021-01-26 21:01:20 · 152 阅读 · 0 评论
分享