算法
Sai_BAN
这个作者很懒,什么都没留下…
展开
-
在二叉搜索树中搜索一个数
// 在BST中搜索一个数 boolean isInBST(TreeNode root, int target) { if (root == null) return false; if (target == root.val) return true; else if (target < root.val) return isInBST(root.left, target); else return isInBST(ro...原创 2021-05-19 20:19:01 · 237 阅读 · 0 评论 -
判断二叉搜索树的合法性
对于二叉搜索树的每一个节点root,代码值检查了它的左右孩子节点是否符合左小右大的原则,而且root的整个左子树都要小于root.val ,整个右子树都要大于root.val 。 public boolean isValidBST(TreeNode root) { return isValidBST(root, null, null); } private boolean isValidBST(TreeNode root, TreeNode min, TreeNo原创 2021-05-19 20:17:50 · 320 阅读 · 0 评论 -
力扣第538题:把二叉搜索树转换为累加树
// BST转化累加树 TreeNode convertBST(TreeNode root) { traverse(root); return root; } int traverse(TreeNode root) { if (root == null) return 0; traverse(root.right); sum += root.val; root.val = s...原创 2021-05-19 20:15:26 · 210 阅读 · 0 评论 -
力扣第230题:二叉搜索树中第K小的元素
// 二叉搜索树的中序遍历是有序的 int kthSmallest(TreeNode root, int k) { traverse(root, k); return res; } private void traverse(TreeNode root, int k) { if (root == null) return; traverse(root.left, k); count++; ...原创 2021-05-19 20:13:46 · 232 阅读 · 0 评论 -
7. 最长公共子序列
//这里选择搞错了,当然后面不好想了。所以正确的选择是:当前这个字符在不在lcs中? // dp[2][4]=m:对s1、s2,s1的前两个字符和s2的前4个字符的最长公共子序列是m public static int getLongest(String s1, String s2) { char[] chars1 = s1.toCharArray(); char[] chars2 = s2.toCharArray(); int...原创 2021-05-03 21:00:45 · 520 阅读 · 0 评论 -
6. 两数之和
解法1:普通解法 /** * @param numbers int整型一维数组 * @param target int整型 * @return int整型一维数组 */ public int[] twoSum(int[] numbers, int target) { int[] res = new int[2]; int pre, last; for (int i = 0; i < number.原创 2021-05-03 17:52:55 · 297 阅读 · 0 评论 -
5. 反转链表
方法1:利用栈 // 我也不知道为啥要大写,牛客就大写了 public ListNode ReverseList(ListNode head) { // 1.遍历链表,把节点放入栈里,然后从栈里取出来,重新组成链表。 if (head == null) { return null; } ListNode tmp = head; Stack<ListNode> stack =原创 2021-05-02 21:25:02 · 282 阅读 · 0 评论 -
4. Leecode高楼扔鸡蛋 --进阶算法之转换状态方程
之前 dp[K,N]=m 表示的含义:鸡蛋有K个,楼最高N层,那么最坏情况下找到鸡蛋恰好不被摔破的楼层F的最小尝试次数为m 现在重新定义一下: dp[K,m] = N : 鸡蛋有K个,最多可以扔m次,可以得到的最高楼层数N。 其实这个就是上面的反推。 完整代码如下 public int solution(int K, int N) { int[][] dp = new int[K + 1][N + 1]; int m = 1; for (; dp[K]原创 2021-05-01 15:32:46 · 368 阅读 · 0 评论 -
3. 二分查找算法 --基础、寻找左侧边界、寻找右侧边界
public class BinarySearch { public static void main(String[] args) { int[] nums = new int[]{1, 2, 3, 4, 6, 7, 8, 9}; // System.out.println(binarySearch(nums, 9)); int[] nums2 = new int[]{1, 3, 3, 3, 4}; // System.out.原创 2021-04-30 22:00:22 · 474 阅读 · 1 评论 -
2. LeeCode 高楼抛鸡蛋(进阶算法---二分搜索优化法)
代码如下 class ThrowEgg { int[][] memo; // int count; public static void main(String[] args) { ThrowEgg te = new ThrowEgg(); // System.out.println(ta.innerLoop(1, 2)); System.out.println(te.outerLoop(2, 6)); // S...原创 2021-04-30 21:54:15 · 357 阅读 · 1 评论 -
1. Leecode高楼抛鸡蛋 --递归回溯法和动态规划法
题⽬是这样:你⾯前有⼀栋从 1 到 N 共 N 层的楼,然后给你 K 个鸡蛋 ( K ⾄少为 1)。现在确定这栋楼存在楼层 0 <= F <= N ,在这层楼将鸡 蛋扔下去,鸡蛋恰好没摔碎(⾼于 F 的楼层都会碎,低于 F 的楼层都不 会碎)。现在问你,最坏情况下,你⾄少要扔⼏次鸡蛋? 回溯法 public class ThrowAgg { public static void main(String[] args) { ThrowAgg t原创 2021-04-30 19:32:54 · 373 阅读 · 1 评论