自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Billy's Blog

欢迎访问我的博客

  • 博客(224)
  • 资源 (2)
  • 收藏
  • 关注

原创 101. 对称二叉树

解题思路:判断一棵树是否对称,主要看三个地方。① 对于根结点,要求左右两个子结点的值要相同② 左结点的左子结点的值要等于右结点的右子结点的值③ 左结点的右子结点的值要等于右结点的左子节点的值。 public boolean isSymmetric(TreeNode root) { if (root == null) return true; return...

2020-01-31 21:56:21 238

原创 100. 相同的树

解体思路:判定条件有两个:① 两棵树结构相同 ② 结点的值相同public boolean isSameTree(TreeNode p, TreeNode q) { if (p == null && q == null) { return true; } if (p == null || q == null) { return fa...

2020-01-31 21:05:55 224

原创 153. 寻找旋转排序数组中的最小值

解题思路:二分法:可以用来查找有序或部分有序的数组。对于一个数组A,如果存在A[left] < A[right],则这个数组一定是有序的了。根据题干,可知该数组在预先某个未知点上进行了旋转,那么存在以下两种情况:① 如果A[mid] > A[start],则最小值一定在右半区间,如示例1,2。② 如果A[mid] < A[start],则最小值一定在左...

2020-01-27 18:29:36 262

原创 104. 二叉树的最大深度

解题思路:二叉树的高度(深度)可以认为是左右子树的最大高度 + 1; public int maxDepth(TreeNode root) { int leftHeight = 0, rightHeight = 0; if (root == null) { return 0; } if (root.lefNode != null) leftHe...

2020-01-12 00:11:36 127

原创 38. 外观数列

比较相邻两个数是否相同,进而决定是移动下标,还是描述该项内容。public String countAndSay(int n) { StringBuilder builder = new StringBuilder(); StringBuilder seq = new StringBuilder(); builder.append("1"); ...

2020-01-05 21:20:55 541

原创 06. Z 字形变换

这道题目在解题时关键是要弄清楚“z字形排列”是怎么一回事,仅仅根据numRow为3的情况可能看的不会太明显,把行数为4和行数为3的情况,做一个对比,更容易找到解题思路。1)当不考虑对角线上的元素时,完成可以看成是数字是一列一列的跳转,且跳转距离为numRow * 2 - 2;2) 再去考虑计算对角线的元素的位置。 public String convert(String...

2020-01-05 16:47:09 142

原创 有效的完全平方数

public boolean isPerfectSquare(int num) { int i = 1, j=num; while (i &lt;=j) { int mid = (i + j)/2; if (mid == (num * 1.0/mid)) // 防止乘法溢出 ...

2019-03-08 11:39:20 187

原创 寻找比目标字母大的最小字母

public char nextGreatestLetter(char[] letters, char target) { // 先判断最后一个字母是否比目标字母大 if (letters[letters.length-1] &lt;= target) return letters[0]; int low = 0, high = letters.length-1...

2019-03-08 11:29:45 516

原创 区间列表的交集

解题思路:先要考虑两个集合存在交集的情况。通过分析,可以知道当a.s &gt;= b.s时,交集为[a.s, min(a.e, b.e)],同理当b.s &gt;= a.s时,交集为[b.s, min(a.e, b.e)]。 public Interval[] intervalIntersection(Interval[] A, Interval[] B) { Arra...

2019-03-07 12:15:09 982

原创 两数之和II

public int[] twoSum(int[] numbers, int target) { int i = 0, j = numbers.length-1; int[] ret = new int[2]; while (i &lt; j) { while (target &gt; 0 &amp;&amp; numbers[j] &gt; target) ...

2019-03-06 12:09:07 190

原创 删除排序数组中的重复项

public int removeDuplicates(int[] nums) { int j = 1; // 慢指针 for (int i=1; i&lt;nums.length; i++) { if (nums[i] != nums[i-1]) { nums[j++] = nums[i]; } } return j; }...

2019-03-06 11:38:18 133

原创 有序数组的平方

public int[] sortedSquares(int[] A) { int i = 0, j = A.length-1; int k = A.length-1; int[] tmp = new int[A.length]; while (i &lt;= j) { if (A[i] * A[i] &lt;= A[j] * A[j]) { ...

2019-03-06 11:12:03 241

原创 移除元素

双指针:两个指针分别指向首尾,遍历头指针,遇到等于val时,遍历尾指针,找到不等于val的值,进行交换,两指针相撞时,结束。 public int removeElement(int[] nums, int val) { int i = 0, j = nums.length-1; // 将等于val的数移动到数组右边 while (i &lt;= j) { ...

2019-03-05 13:14:16 175

原创 寻找重复数

解题思路:二分法。在区间[1, n]中搜索,首先求出中点mid,然后遍历整个数组,统计所有小于等于mid的数的个数,如果个数小于等于mid,则说明重复值在[mid+1, n]之间,反之,重复值应在[1, mid-1]之间,然后依次类推,直到搜索完成,此时的right就是我们要求的重复值。 public int findDuplicate(int[] nums) ...

2019-03-04 21:05:20 616

原创 两个数组的交集

二分法: 先排序,对两个数组做归并运算,使用set来去重。 public int[] intersection(int[] nums1, int[] nums2) { int i = 0, j = 0, k = 0; // 排序 Arrays.sort(nums1); Arrays.sort(nums2); HashSet&lt;Integer&gt; ...

2019-03-04 20:41:38 344

原创 反转字符串中的元音字母

public String reverseVowels(String s) { int i = 0; int j = s.length()-1; char c; char[] ss = s.toCharArray(); while (i &lt; j) { while (i &lt; j &amp;&amp; containsVowels(ss[i])...

2019-03-04 20:16:52 476

原创 盛最多水的容器

解题思路:两个指针,一前一后,分别指向第一个元素和最后一个元素,计算此时容纳水的容量,根据两边的高度调整移动方向,指针向高的那边移动(贪心性质)两个指针相撞时就结束。 public int maxArea(int[] height) { int i = 0; int j = height.length-1; int maxWater = 0; whil...

2019-03-04 16:38:40 178

原创 最低票价

int[][] memo = null; // 备忘录 int r(int idx, int[] days, int[] costs, int deadLine) { int a, b, c, min; if (idx == days.length) return 0; // 有效期超过最后一天 if (deadLine &gt;= days[days...

2019-03-01 18:48:53 329

原创 完全平方数

解题思路:该题目与Coin Change很相似,先找出到n为止的所有的完全平方数,然后暴力法进行搜索。当然,可以继续优化为动态规划。 int[][] memo = null; // 备忘录 public int sovle(int n, int [] squares, int idx) { if (n == 0) // 找到一种组合 return 0; ...

2019-03-01 15:28:37 1160

原创 翻转矩阵后的得分

解题思路:先判断每一行的第一个元素,是否是0,如果是,就翻转该行;判断第2列到最后一列中,每列0的个数是否大于1的个数,如果是,就翻转该列;之后按照二进制数的解释进行计算。 public int matrixScore(int[][] A) { if (A == null || A.length == 0) return 0; int rows = A....

2019-03-01 14:53:39 184

原创 加油站

解题思路:先计算从每一个站点的油量与前往下一个站点的油量之间的差, 判断是否可以从改点通往其他站点。再对每一个有可能的站点,计算环路的耗油量,如果跑完全程耗油量不小于0,则能行驶一周。 public int canCompleteCircuit(int[] gas, int[] cost) { int[] costGas = new int[gas.length]; ...

2019-02-28 15:16:31 178

原创 小Q的歌单

  解题思路:分别考虑使用全使用A,全使用B,以及A,B混合使用的情况。 static long[][] memo = null; // 备忘录 public static void main(String[] args) { int k, a, x, b, y; Scanner scan = new Scanner(System.in); while (scan.h...

2019-02-27 16:29:39 224

原创 编辑距离

int[][] memo = null; // 备忘录 int solve(String word1, String word2, int c1, int c2) { int a, b, c ; int n1 = word1.length(); int n2 = word2.length(); if (c1 == n1 &amp;&amp; c2 == n2...

2019-02-26 17:37:56 180

原创 租用游艇问题

   长江俱乐部在长江设置了n个游艇出租站1,2,…n,游客可在这些游艇出租站租用游艇,并在下游的任何一个游艇出租站归还游艇。游艇出租站i到游艇出租站j之间的租金为r(i,j),设计一个算法,计算出从出租站1到出租站n所需要的最少租金。解题思路:f(i, n) = min(f(i,j ) +f(j, k) + ..+f(k,n)) 。public class RentYa...

2019-02-26 15:43:03 395

原创 无重叠区间

解题思路:该题目类似于活动安排问题,先按照结束时间的长短进行排序,结束时间短的排在前面,在根据后一个活动的开始时间要比前一个活动的结束时间要晚的原则,从前向后筛选即可。  public int eraseOverlapIntervals(Interval[] intervals) { int n = intervals.length; int ncount = 0; ...

2019-02-25 16:54:41 202

原创 判断子序列

双指针法 public boolean isSubsequence(String s, String t) { // s为空串 if (s.isEmpty()) return true; int i = 0, j = 0; while (i &lt; s.length() &amp;&amp; j &lt; t.length()) { ...

2019-02-25 15:34:12 856

原创 根据身高重建队列

解题思路:1、先按照排名进行排序,排名小的在前,若名次相同,身高矮的在前面。 2、然后按照身高大小,逐一与前面的人比较,若小于前面的人的身高,则计数器加1,当计数器等于名次时,就逐步移动数组元素,将其放到合适的位置上。 public int[][] reconstructQueue(int[][] people) { int n = people.l...

2019-02-24 16:44:59 634

原创 最长的斐波那契子序列的长度

1、暴力法 枚举所有可能的情况,计算每一种斐波那契数列的长度,取最大值。 // 暴力法(不好实施) public int lenLongestFibSubseq(int[] A) { int a, b, aa; int longest = 0; int len = 2; // 当前斐波那契子序列的长度 for (int i=0; i&lt;A.lengt...

2019-02-23 19:18:14 844

原创 . 重构字符串

 解题思路:1.先统计每个字母出现的次数  2. 按照次数由高到底排序  3. 先取最高,假设是a  4. 然后从次高中取一个,组合起来,然后重新统计次数然后回到3。 public String reorganizeString(String S) { int n = S.length(); // 键:字符,值:下标 HashMap&lt;Character, I...

2019-02-23 17:23:08 402

原创 划分字母区间

解题思路:先用一个map统计出,每一个字符的最后出现位置。遍历字符串S,对于每一个字符,判断它的最后出现位置是否包含在 前面的字符最后出现位置内,如果不包含,就更新最后出现位置。每次达到最后出现位置时,就计算片段的长度,直到遍历结束为止。 public List&lt;Integer&gt; partitionLabels(String S) { ArrayList&l...

2019-02-23 15:39:28 798

原创 优势洗牌

解题思路:先对数组A排序, 对于B中的每一个元素i,在A中遍历,找到最小的大于B[j]的元素,如果找不到,就用A中最小的未使用的元素来对应。(有点像田忌赛马) public int[] advantageCount(int[] A, int[] B) { // 按照元素大小对A排序 Arrays.sort(A); // 判...

2019-02-23 14:36:11 232

原创 单调递增的数字

给定一个非负整数 N,找出小于或等于 N 的最大的整数,同时这个整数需要满足其各个位数上的数字是单调递增。(当且仅当每个相邻位数上的数字 x 和 y 满足 x &lt;= y 时,我们称这个整数是单调递增的。)示例 1:输入: N = 10输出: 91、暴力法(超时)  public int monotoneIncreasingDigits(int N) ...

2019-02-22 17:46:23 1659

原创 最长回文子串

给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案。1、暴力法对于每一个子串,判断是否是回文字符串,找出长度最大者即可。  public String longestPalindrome(String s) { /...

2019-02-22 16:27:14 127

原创 救生艇

第 i 个人的体重为 people[i],每艘船可以承载的最大重量为 limit。每艘船最多可同时载两人,但条件是这些人的重量之和最多为 limit。返回载到每一个人所需的最小船数。(保证每个人都能被船载)。示例 1:输入:people = [3,2,2,1], limit = 3输出:3解释:3 艘船分别载 (1, 2), (2) 和 (3)解题思路:先按照人的体...

2019-02-22 15:58:53 543

原创 最长有效括号

给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度。示例 1:输入: ")()())"输出: 4 解释: 最长有效括号子串为 "()()" public int longestValidParentheses(String s) { // 先对字符串s进行判断 if (s == null || s.lengt...

2019-02-22 15:10:18 447

原创 整数分解

给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。示例 1:输入: 2输出: 1解释: 2 = 1 + 1, 1 × 1 = 1。示例 2:输入: 10输出: 36解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。说明: 你可以假设 n 不小于 2 且不大于 58。1、回溯法(对于每...

2019-02-21 18:06:39 1020

原创 区域和检索 - 数组不可变

给定一个整数数组  nums,求出数组从索引 i 到 j  (i ≤ j) 范围内元素的总和,包含 i,  j 两点。示例:给定 nums = [-2, 0, 3, -5, 2, -1],求和函数为 sumRange()sumRange(0, 2) -&gt; 1sumRange(2, 5) -&gt; -1sumRange(0, 5) -&gt; -3说明:你可以假设...

2019-02-21 16:41:27 124

原创 旅行售货员问题

某售货员要到若干城市去推销商品,已知各城市之间的路程,他要选定一条从驻地出发,经过每个城市一遍,最后回到住地的路线,使总的路程最短。解题思路:先对所有城市全排列 ,再计算每条路径的花费,取最小值。 int MinCost = Integer.MAX_VALUE; // 花费 /** * @param route 路线花费 * @param city 城市编号 ...

2019-02-18 19:09:09 1483 1

原创 子集和问题

子集和问题的一个实例为〈S,t〉。其中,S={ x1, x2,…, xn}是一个正整数的集合,c是一个正整数。子集和问题判定是否存在S的一个子集S1,使得子集S1和等于c。 设计一个回溯法来求解该问题。解题思路:对于该集合的每一个子集,若元素和为正整数c,则将该子集放入解集中,最后返回解集即可。 /** * @param list 存放所有满足要求的解 * @para...

2019-02-18 16:00:15 998

原创 回溯法思想

回溯法有“通用的解题法”之称。可以用来系统地搜索一个问题的所有解或任一解。回溯法在问题的解空间树中,按照深度优先策略,从根结点出发搜索解空间树。算法搜索至解空间树的任一结点时,先判断该结点是否包含问题的解。如果肯定不包含,则跳过对以该结点为根的子树的搜索,逐层向其祖先结点回溯。否则,进入该子树,继续按照深度优先策略搜索。回溯法求问题的所有解时,要回溯到根,且根结点的所有子树都已被搜索...

2019-02-18 12:39:40 718

CC++与设计模式基础课程讲义

CC++与设计模式基础课程讲义 完整版

2022-10-10

mldn视频笔记

mldnjava基础视频笔记 的

2018-07-01

李兴华java8编程讲义

java8最新讲义,很不错的哦 ha

2018-06-10

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除