自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(12)
  • 收藏
  • 关注

原创 41. First Missing Positive Hard

这道题很让人摸不着头脑,哪怕已经AC了,还是不知道要干嘛。。。反正是找个正数嘛,有两种情况:1.它是数组里某个数前面的没有出现的数;2.它是数组里所有的数后面的第一个数。(我TM都不知道自己在讲什么,这题为什么是hard..)那我就先找个数组的最大值max,然后开个max+1大的bool数组(visit),标记小于等于max的数有没有出现在数组,比如数组里有2,就把visit[2] 置为1,表示2

2017-04-22 17:30:36 175

原创 40. Combination Sum II Medium

上一题的加强版,主要思路类似,建议与上一题同时食用。。。这题题目的变化是,数组不再有序,同时有了重复的数字出现,但不允许多次取同一个值,这就稍微有点麻烦。二话不说先排序,方便后续操作。这里需要满足的要求有两个:首先,每一次迭代,在遍历候选元素的时候,同一位置的元素如果上一次迭代已经选过,这次不能选。其次,每一次迭代,相同元素,只能选择一个继续迭代,否则会有重复结果产生,例如数组中有连续3个2出

2017-04-22 13:38:43 282

原创 39. Combination Sum Medium

这道题是回溯法的简单应用,因为之前做八皇后问题的时候已经研究了一波回溯法,所以这道题写起来也很得心应手,很快就AC了。主要还是套用回溯法的模版,具体到这题就是,每次迭代遍历待选参数,从大于等于上一个待选元素的位置直到等于target的元素的位置,这些都是本轮迭代可选的元素。如果小于target,就添加新元素后继续迭代,如果等于target,直接加入结果。因为我们保证了每次选择不从 比之前选过的元素

2017-04-20 16:30:45 179

原创 38. Count and Say Easy

简单题,主要是题目太难理解,没讲清楚,这里转一段别人的解释。题意是n=1时输出字符串1;n=2时,数上次字符串中的数值个数,因为上次字符串有1个1,所以输出11;n=3时,由于上次字符是11,有2个1,所以输出21;n=4时,由于上次字符串是21,有1个2和1个1,所以输出1211。依次类推。代码比较繁琐,懒的改了。。class Solution {public:    str

2017-04-20 15:52:36 151

原创 34. Search for a Range Medium

这道题题目很简单,但是要保证O(log n)的时间复杂度,还是要花一些心思。本人实在水平有限,一开始就写了个超时的做法,连第一个样例都过不了。。。。看了答案的标题,用两次二分查找分别找头和尾,才有了思路。答案的代码很简洁,这里还是讲讲我自己的做法。先找头的位置,用二分查找,如果找到mid = target,那么头就在这个mid的左边,或者就是mid,如果mid左边的值小于mid处的值,则这就是要找

2017-04-20 14:34:38 243

原创 81. Search in Rotated Sorted Array II Medium

这道题是上一道的加强版,这里可以允许重复的数出现,确实增加了难度。按照我原来的思路,只需要修改nums[mid] == nums[high] 的情况即可(详细思路参考上一篇文章)。测试样例中有 3 1 1这种情况,我一开始以为nums[mid] == nums[high] 时,让high = mid - 1,即检索此时mid左边的部分即可,但实际上,还有 1 1 3 1这种情况。所以,nums[m

2017-04-20 13:01:32 113

原创 33. Search in Rotated Sorted Array Medium

这道题要在一个已排序的、循环过一段的数组中找一个target。主要思想还是实现O(logn) 的二分查找,先看mid处的值是否是就是target,如果不是,在看a[mid]否比high处的值小,如果小,那么数组的最小值就在左半部分(已排序,没有循环的正常数组也是这种情况),否则就是在右半部分。如果最小值在左半部分,则此时右半部分是一个正常的递增的数组,target如果大于a[mid],则它在右半部

2017-04-18 11:55:48 116

原创 52. N-Queens II Hard

跟上一题做法一样,这里不在求所有的答案,而是要答案的个数,所以只需要在上一题的基础上稍加修改,加一个count来计数就可以。class Solution {public:int count;    int totalNQueens(int n) {        count = 0;        vector matrix(n, string(n, '.'));

2017-04-17 22:51:31 151

原创 51. N-Queens Hard

经典的八皇后问题,主要考查回溯法。参考前面一篇转载别人的结束回溯法的文章,里面的模版很规范很实用。这里提供两种解法。主要思想都是从矩阵的第0行开始,每一行从左开始尝试摆一个棋子,然后看这个位置是否合适,如果合适,则将这个矩阵递归下去;如果不合适,则看下一个位置,直到这一行的位置都被尝试过。函数持续递归调用到第n行,就把结果添加到答案中。第一种代码如下:class Solution {p

2017-04-17 22:48:01 263

原创 36. Valid Sudoku Medium

不会做,抄的答案,被 k = i / 3 * 3 + j / 3 惊艳到了class Solution{public:    bool isValidSudoku(vector > &board)    {        int used1[9][9] = {0}, used2[9][9] = {0}, used3[9][9] = {0};             

2017-04-13 17:18:32 139

原创 31. Next Permutation Medium

这道题是要求所给序列按照字典序比较的下一个最小的序列。先考虑怎么样让当前序列变大?很简单,就是找到某一个元素,把它替换成来自它后面的元素中比它大的元素。那么,怎么得到最小的下一个序列呢?方法就是从倒数第二位开始找,先把它后面的元素按字典序排序,然后把它替换成它后面的元素中刚好比它大的元素即可。如果找不到比它大的,再遍历倒数第三位,以此类推。如果遍历完整个vector都没有,只能做完整的排序并返回。

2017-04-13 00:46:29 151

原创 29. Divide Two Integers Medium

这道题是想用减法来实现除法,通常的做法是a不停的减b,看能减多少次,但是这样会有超时的情况,比如很大的数除以1,这个时候需要用到的技巧就是让b向左移位,相当于乘二,再跟a比较,如果a还是大,再把b移位,再比较,这样循环进行,直到a小,就减去最后一次移位之前b的值。简而言之,就是让a不停的减去最大可减的b的2的n次方倍,这样来更快的计算b的个数。这里用到了一些位运算,还有labs函数,返回的是lon

2017-04-05 00:02:23 193

空空如也

空空如也

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

TA关注的人

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