自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

u010900754的专栏

真心希望国内博客环境 多一些原创 少一些复制

  • 博客(24)
  • 资源 (3)
  • 收藏
  • 关注

原创 【Leetcode】424. Longest Repeating Character Replacement

题目:https://leetcode.com/problems/longest-repeating-character-replacement/#/description题目给定一个string和一个k。最多可以把k个字符更改,且更改以后必须相同。返回最长的连续的相同字符数目。这个题目可以在On内解决,使用滑动窗口的思想。两个指针start和end,end向后移动,每一次都找出start

2017-03-22 10:36:21 784

原创 【Leetcode】373. Find K Pairs with Smallest Sums

题目:https://leetcode.com/problems/find-k-pairs-with-smallest-sums/#/description意思是,给定两个有序数组,返回第k小的pair。大小由和决定。对于非单一数组而言,找顺序统计量的好办法是使用最小堆。所以一个很直接的思路就是把所有的点对加入到最小堆,然后输出前k个。问题就是没有利用到题目中“两个数组都有序这个条件”

2017-03-18 04:35:53 666

原创 【Leetcode】142. Linked List Cycle II

题目:https://leetcode.com/problems/linked-list-cycle-ii/#/description返回链表中的环的第一个元素,如果没有返回null。检测是否有环,利用双指针一快一慢即可。如果要返回环,需要一些数学计算。假设环大小为r,相遇点为n2,环点为n1,起点为n0。相遇时,快指针路程为df,慢为ds。则有:df - ds = kr,2d

2017-03-16 04:09:47 357

原创 【Leetcode】45,55 Jump game

先看55:https://leetcode.com/problems/jump-game/#/description数组的每一个元素代表在该位置能跳跃的最大步数,问能否从位置0到末位置。一个简单的思路是遍历每一个位置,然后用每一个步数更新所能到达的每一个下一个位置。假设最大步数是s,那么复杂度是Oxn。特别是当x很大时,效率比较低。更好的思路:充分利用“最大距离”。每一次都计算

2017-03-15 06:10:58 356

原创 【Leetcode】395. Longest Substring with At Least K Repeating Characters

题目:https://leetcode.com/problems/longest-substring-with-at-least-k-repeating-characters/#/description要求是找出最长的子串,子串中的每一个字符都要重复至少k次。思路是分治法。要找s[i,j]的最大子串,先统计频数,然后遍历一遍频数,找出第一个频数小于k且大于0的字符,然后找出这个字符的位

2017-03-15 02:27:55 6776 3

原创 【数据结构与算法】根据遍历结果构建二叉树

对于普通的二叉树,已知遍历结果,如果想唯一确定二叉树,那么必须知道中根遍历,再加上先根后者后根的一种。如果能够划分出序列中的左子树和右子树,那么就可以构建二叉树。知道先根或者后根,就可以知道根,然后再在中根遍历的结果中找出根,那么左边就是左子树,右边就是右子树。对于BST,只需要知道先根或者后根就可以确定,或者说只需要知道根就可以确定,利用左子树比根小,右子树比根大的特性就可以划分

2017-03-14 11:22:17 781

原创 【Leetcode】451. Sort Characters By Frequency

题目:https://leetcode.com/problems/sort-characters-by-frequency/#/description特殊的排序,对频率排序。1.常规思路,先遍历一遍,把频数存入map,再把map的entry存入priorityqueue,最后逐一出队即可。代码:public String frequencySort1(String s) {

2017-03-13 07:52:58 342

原创 【Leetcode】171. Excel Sheet Column Number,168. Excel Sheet Column Title

171题目:https://leetcode.com/problems/excel-sheet-column-number/?tab=Description给定一个string,转换成数字。类似于多进制之间的互转,但是有一点不同,这里是从1开始的,即A对应1.而一般的多进制,都会对应到0.这是一点需要注意的。思路就是从string的右端向左端遍历,假设现在是c,然后计算出c代表的数字,

2017-03-13 05:12:11 262

原创 【Leetcode】417. Pacific Atlantic Water Flow

题目:https://leetcode.com/problems/pacific-atlantic-water-flow/?tab=Description这是一道很好的练习bfs和dfs的题目。题目给出了一个矩阵,矩阵数字代表山地的高度,水流只能从高处流到地处或者至少相等。找出所有的坐标,从这个坐标可以到达左边界或者上边界中的一个并且也可以到达右边界或者下边界中的一个。刚开始做这个题目

2017-03-12 07:54:54 979

原创 【Leetcode】491. Increasing Subsequences

题目:https://leetcode.com/problems/increasing-subsequences/?tab=Description找出所有的长度大于等于2的递增序列。思路:这里是找出所有的解。因此选择backtracking。要注意一点,关于去重。之前做过类似的,combinationsum那种,那个类型的题目是从集合中选元素,因此集合的顺序无关紧要,但是这里是序列,顺序是

2017-03-11 05:43:22 464

原创 【Leetcode】437. Path Sum III

题目:https://leetcode.com/problems/path-sum-iii/?tab=Description题目要求找出和为sum的路径的数目。路径的开头和结尾可以是任意的。之前有一道题目,要求路径的开头和结尾必须是root和leaf,那么做一个遍历,当到达叶子节点时,检测是否和为sum。这里不能到达null再检测,因为叶子节点的null有两个,结果就返回2,多出一个,所以

2017-03-11 01:57:22 415

原创 【Leetcode】282. Expression Add Operators

题目:https://leetcode.com/problems/expression-add-operators/?tab=Description意思是给一个只包含数字的string,找出所有的可能的添加运算符+ - *的方式使得计算计算结果是target。看了别人代码写的,里面有很多地方值得借鉴。public List addOperators(String num, int ta

2017-03-10 04:07:54 416

原创 【Leetcode】241. Different Ways to Add Parentheses

题目:点击打开链接https://leetcode.com/problems/different-ways-to-add-parentheses/?tab=Description给出一个表达式,求出所有可能的表达式的结果。(1)对于加括号这个问题,是按照操作符分割来加的。所以每一次都是若干个分治过程,个数等于操作符数目。return case是没有操作符。这个有重叠子问题的特征,因此如果想

2017-03-09 11:46:24 288

原创 【Leetcode】39. Combination Sum

题目:https://leetcode.com/problems/combination-sum/?tab=Description返回所有不同的和为target的解。属于返回所有解的题目,一般来讲需要用backtrakcing思路。因此复杂度比较高,这个是指数级别。返回所有解的问题一个难点在于去重。(1)因此在函数中要加入一个start参数,使得后续的步骤不会往前看。(2)如果

2017-03-09 10:50:11 174

原创 【Leetcode】最小 subsetsum

给定一个数组和一个target,找出最少的元素和为target。其实是一个subsetsum问题,之前额subsetsum存储的是boolean,这里存长度即可。定义子问题dp[i][j]为使用前j个元素达到和j的最小长度,那么dp[i][j]首先可以使用dp[i][j - 1]的结果。然后再看能否使用array[j],那么就要看dp[i-array[j]][j-1]的值了。代码:

2017-03-09 09:55:14 473

原创 【数据结构与算法】最长公共子串 最长公共子序列

1.最长公共子串:找出s和t的公共子字符串的最大长度。使用dp,定义子问题dp[i][j]:s[0-i]和t[0-j]的最长公共子串长度。那么dp[i][j] = dp[i - 1][j - 1] + 1 if s[i]=t[j], otherwise 0.代码:public int longestCommonSubString(String s, String t){ int[]

2017-03-07 05:19:26 827 1

原创 【Leetcode】363. Max Sum of Rectangle No Larger Than K

https://leetcode.com/problems/max-sum-of-sub-matrix-no-larger-than-k/?tab=Description这个题目之所以hard是有两个点:一个是二维数组求最大另一个是求不大于k的最大这两点在前面的博客中都有讲。

2017-03-05 05:57:42 704

原创 【数据结构与算法】小于等于k的最大连续子序列和

使用Kadane算法可以在On内得到最大连续子序列和。如果要求得到和不超过k,那么该如何解决?首先要看能不能继续使用Kadane算法。答案是不能。回顾Kadane,Kadane中使用dp[i]存最后一个元素是array[i]的最大和,然后所有dp[i]的最大值。那么首先一个想法是,找出dp[i]中小于等于k的值中的最大值。这是不正确的,因为正常来讲,要求小于等于k的最大值,我们应该求出所有

2017-03-05 05:53:48 6255 1

原创 【数据结构与算法】二维数组 最大矩形和

使用Kadane算法可以很方便地求解一维数组的最大连续子序列之和。下面是Kadane算法的延伸,在二维数组中求解最大矩形。思路是要利用一维数组的求解方法来求解二维,假设现在要求以i列开始到j列结束的最大和,不能是i和j之间的,必须以i和j是开始和结束。可以把i和j之间的列相加,最终得到一个一维数组,那么这个一维数组的最大值就是i和j的最大值,这是因为这个一维数组中存的就是每一行的和,与co

2017-03-05 02:26:06 2288

原创 【Leetcode】368. Largest Divisible Subset

题目:https://leetcode.com/problems/largest-divisible-subset/?tab=Description要求找出一个最大的子集,子集满足如下性质:子集中的任何两个元素存在倍数关系。这个题目的关键是先排序,排了序有一些好用的性质。假设A是一个已经找到的合法子集,对于A后面的元素i,因为已经排序,那么i肯定大于A的最大元素。如果i可以整除A的

2017-03-03 04:27:42 376

原创 【Leetcode】300. Longest Increasing Subsequence

1.最长递增子序列:思路是dp,先说一个很general的idea。子问题为dp[i],以array[i]为结尾的最长子序列的最后一个元素。那么只要遍历之前的所有dp即可,取可行的里面的最大值。复杂度On2. public int maxISLength(int[] array){ int[] dp = new int[array.length]; dp[0] = 1; int

2017-03-03 03:09:09 298

原创 【Leetcode】72. Edit Distance

题目:https://leetcode.com/problems/edit-distance/?tab=Description题目要求最少的变换数目把s1变成s2,有三种操作,insert,change,delete。f(i,j)返回从s1从i位置以后的string变换到s2从j位置以后的string,最开始从两个sting的开头比较,如果一样,返回f(i+1,j+1)。否则有三种方式,如

2017-03-02 11:55:49 261

原创 【Leetcode】115. Distinct Subsequences

又是一道DP的题目,个人感觉DP的题目比较难,主要因为:(1)DP的难点是寻找子问题,如果找到很好的子问题,那么就可以瞬间搞定。(2)通常也会带有一点backtracking的思想,有时候总是优先想到bt,然后思路就被限制了。DP在leetcode主要解决两类问题,第一是求数目,第二是求最优解。少数可以解决所有解问题,不过一般而言所有解还是得用带memo的递归或者子问题。在数组中出现的dp

2017-03-01 10:53:21 363

原创 【Leetcode】268. Missing Number

给定一个数组,大小为n,里面只含有0-n的数字,且不同,那么肯定有一个数字无法包含。找出这个数字。https://leetcode.com/problems/missing-number/?tab=Description先介绍一个运用bit操作的算法。首先下标肯定是0到n-1,值是0到n少一个,那么把下标和值一起做xor,最后再和n做xor,缺失的值只出现了一次,其余都是两次。结果就是

2017-03-01 03:57:49 261

设计模式的 课件

主要讲解了 设计模式的相关内容 包括类图等其他

2014-04-15

head first 审计模式

headfirst 一系列书籍中 对设计模式的讲解 很容易理解

2014-04-15

空空如也

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

TA关注的人

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