![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
DataStructuresAndAlgorithms
文章平均质量分 56
Jackie_zhihe
职场技术沉淀、分享、
展开
-
递归-Recursion
两数相加 给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,这两个数都不会以 0 开头。 public class Solution { public ListNode addTwoNumbers(ListNode l1, ListNode l2) { ListNode prev = new ListNode(0); ...原创 2021-11-11 01:00:23 · 85 阅读 · 0 评论 -
广度优先搜索
相同的树 给你两棵二叉树的根节点p和q,编写一个函数来检验这两棵树是否相同。 如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。 public boolean isSameTree(TreeNode p, TreeNode q) { if(p == null && q == null) return true; if(p == null || q == null) return false; if(p.val == q.val) ...原创 2021-11-07 18:34:51 · 51 阅读 · 0 评论 -
深度优先搜索
二叉树的中序遍历 给定一个二叉树的根节点root,返回它的中序遍历。 public List<Integer> inorderTraversal(TreeNode root) { List<Integer> list = new ArrayList<Integer>(); Stack<TreeNode> stack = new Stack<TreeNode>(); TreeNode cur = root; ...原创 2021-11-07 18:29:51 · 43 阅读 · 0 评论 -
多线程 multi-thread
H2O生成 存在一个屏障(barrier)使得每个线程必须等候直到一个完整水分子能够被产生出来。 氢和氧线程会被分别给予releaseHydrogen和releaseOxygen方法来允许它们突破屏障。 这些线程应该三三成组突破屏障并能立即组合产生一个水分子。 你必须保证产生一个水分子所需线程的结合必须发生在下一个水分子产生之前。 换句话说: 如果一个氧线程到达屏障时没有氢线程到达,它必须等候直到两个氢线程到达。 如果一个氢线程到达屏障时没有其它线程到达,它必须等候直到一个氧线程和另一...原创 2021-11-07 14:39:09 · 166 阅读 · 0 评论 -
并查集:Disjoint-set
目录 最长连续序列 被环绕的区域 岛屿数量 除法求值 最长连续序列 给定一个未排序的整数数组nums,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。 public int longestConsecutive(int[] num) { int res = 0; HashMap<Integer, Integer> map = new HashMap<Integer, Integer>(); for (int n : num..原创 2021-11-07 14:12:51 · 65 阅读 · 0 评论 -
回溯BackTrack
有重复项数字的所有排列 给出一组可能包含重复项的数字,返回该组数字的所有排列。结果以字典序升序排列。 import java.util.*; public class Solution { ArrayList<ArrayList<Integer>> res = new ArrayList<>(); ArrayList<Integer> c = new ArrayList<>(); public ArrayList&l原创 2021-11-02 01:02:39 · 148 阅读 · 0 评论 -
字符串String
括号序列 给出一个仅包含字符'(',')','{','}','['和']',的字符串,判断给出的字符串是否是合法的括号序列 括号必须以正确的顺序关闭,"()"和"()[]{}"都是合法的括号序列,但"(]"和"([)]"不合法。 import java.util.*; public class Solution { /** * * @param s string字符串 * @return bool布尔型 */ public boolean原创 2021-10-31 23:35:04 · 68 阅读 · 0 评论 -
双指针TwoPointers
最长无重复子数组 给定一个数组arr,返回arr的最长无重复元素子数组的长度,无重复指的是所有数字都不相同。 子数组是连续的,比如[1,3,5,7,9]的子数组有[1,3],[3,5,7]等等,但是[1,3,7]不是子数组 import java.util.*; public class Solution { /** * * @param arr int整型一维数组 the array * @return int整型 */ public i原创 2021-10-31 22:13:15 · 89 阅读 · 0 评论 -
DynamicProgramming
连续子数组的最大和 输入一个长度为n的整型数组a,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为 O(n). public class Solution { public int FindGreatestSumOfSubArray(int[] array) { int res = array[0]; int max = array[0]; for (int i = 1; i < array.length原创 2021-10-31 21:31:54 · 92 阅读 · 0 评论 -
brute force:最长回文子串
JavaCode import java.util.*; public class Solution { //helper function public boolean isPalindrome(String A, int n) { int k = n / 2; for (int i = 0; i < k; ++i) { if (A.charAt(i) != A.charAt(n - 1 - i)) {原创 2021-10-25 00:06:08 · 49 阅读 · 0 评论 -
dynamic programming:最长公共子串
import java.util.*; public class Solution { /** * longest common substring * @param str1 string字符串 the string * @param str2 string字符串 the string * @return string字符串 */ public String LCS (String str1, String str2) { .原创 2021-10-24 23:31:50 · 889 阅读 · 0 评论 -
dynamic programming:连续子数组的最大和
JavaCode public class Solution { public int FindGreatestSumOfSubArray(int[] array) { int res = array[0]; int max = array[0]; for (int i = 1; i < array.length; i++) { max = Math.max(max + array[i], array[i]);原创 2021-10-24 23:05:28 · 755 阅读 · 0 评论