摘要:题目: 整数数组 nums 按升序排列,数组中的值 互不相同 。 在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k+1], ..., nums[n-1], nums[0], nums[1],
阅读全文
摘要:题目: 给你一个整数数组coins,表示不同面额的硬币;以及一个整数amount,表示总金额。 计算并返回可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回-1。 你可以认为每种硬币的数量是无限的。 示例1: 输入:coins=[1,2,5],amount=11 输出:3
阅读全文
摘要:题目: 给定两个以字符串形式表示的非负整数num1和num2,返回num1和num2的乘积,它们的乘积也表示为字符串形式。 注意:不能使用任何内置的BigInteger库或直接将输入转换为整数。 示例1: 输入:num1="2",num2="3" 输出:"6" 示例2: 输入:num1="123",
阅读全文
摘要:题目描述: 给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 每个右括号都有一个对应的相同类型的左括号。 思路: 通过栈解决。匹配到对称的括号,就出栈。 有左括号
阅读全文
摘要:题目: 给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的 子集(幂集)。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 示例 1: 输入:nums = [1,2,3] 输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]
阅读全文
摘要:题目: 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,这两个数都不会以 0 开头。 思路: 遍历两个链表,逐位相加,还要加上进位。 结果要存
阅读全文
摘要:题目: 给定一个字符串s,请你找出其中不含有重复字符的最长子串的长度。 思路: 滑动窗口算法。 最大子串长度 = 右下标 - 左下标 +1 ; 使用map记录字符的下标,key 为字符,value 为下标。 如果 map 的 key 出现重复,说明有重复字符了。 找出左下标 left,如果字符重复就
阅读全文
摘要:leetcode 21.合并两个有序链表 题目描述: 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 迭代法: 思路: 不断迭代,谁小指向谁 public ListNode mergeTwoLists(ListNode list1, ListNode
阅读全文
摘要:回溯法概念 回溯法:一种通过探索所有可能的候选解来找出所有的解的算法。如果候选解被确认不是一个解(或者至少不是最后一个解),回溯算法会通过在上一步进行一些变化抛弃该解,即回溯并且再次尝试。 应用场景 回溯算法可以搜索得到所有的方案,本质上它是一种穷举算法。 回溯法的原理 回溯算法 = dfs+剪枝
阅读全文
摘要:动态规划 动态规划,其实就是找规律,总结公式/方程。 动态规划,类似于数学归纳法。 关键的思想在「自底向上」和「空间换时间」。 动态规划,可以使用一维数组,有时也会用到二维数组。 应用场景 “动态规划”可以用于子序列、最大/小值问题、回文子串的求解。 一维数组dp[i] 的动态规划的几个步骤: 确定
阅读全文
摘要:二叉树 二叉树特点是每个节点最多只能有两棵子树,且有左右之分 二叉树的数据结构如下: public class TreeNode { //节点的值 int val; //左子树 TreeNode left; //右子树 TreeNode right; TreeNode(int x) { val =
阅读全文
摘要:1.迭代。 链表最常见的操作就是迭代。 while (head.next != null) { head = head.next; } 2.链表转化为数组 涉及到下标的问题,都可以将链表转化为数组解决,数组的每一个元素都是一个节点。。 示例题目LeetCode 876. 返回链表的中间节点 publ
阅读全文
摘要:反转链表 反转链表,常用的方法有迭代,栈反转,递归反转。 迭代 比如,现有链表1->2->3->4->5, 首先,从第一个节点开始,反转,将1->null, 接着向下一个节点2,迭代,反转,将2->1, 接着向下一个节点3,迭代,反转,将3->2,也就是变成了3->2->1,依此类推。 关键的几点:
阅读全文
摘要:最近在整理数据结构方面的知识, 系统化看了下Java中常用数据结构, 突发奇想用动画来绘制数据流转过程. 主要基于jdk8, 可能会有些特性与jdk7之前不相同, 例如LinkedList LinkedHashMap中的双向列表不再是回环的. HashMap中的单链表是尾插, 而不是头插入等等, 后
阅读全文
摘要:一、数据之间的关系 线性关系、一对一、一对多、多对多 二、复杂度 1.时间复杂度:耗费时间的长度 一次for循环的时间复杂度:O(N) 两次for循环嵌套的时间复杂度:O(N2) 计算多个语句混合的时间复杂度,以耗时最久语句的时间复杂度为准。 算法的时间复杂度,用来度量算法的运行时间,记作: T(n
阅读全文