自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 android游戏中关卡式背景是怎么做出来的

在看一个教材,有点启发假设有一张很大的图片那么利用如createBitmap,不断抓取一部分,就可以达到背景移动的“假象”。比如 雷电 马里奥 这样的游戏

2016-01-11 15:43:56 390

原创 327Count of Range Sum

这题跟315Count of Smaller Numbers After Self有异曲同工之妙。315是要求右面的数小于左面这题先处理一下,计算f[0:i]的和 i从0取到数组长度-1因此 任何一个子序列的和 可以表示为  f[0:m]-f[0:n]  这很重要简记新数组为f那么就是要求  min 仍然是归并的策略 仍然是从大到小排序每

2016-01-11 13:53:52 1748

原创 315Count of Smaller Numbers After Self

这题据说有2种做法,一是二叉搜索树。我是基于 归并排序做的。 要求的是 每个数 比它右面多少个数要大。那么假设 我 已经把一个数组分为两部分A B 显然A B内部每个数比自身右边多少个大已经递归求好了,那么关键就是合并。刚开始走了弯路,试图按从小到大排序但是有问题,比如 a1,a2,a3  b1,b2,b3  假定a1b1 那么显然a2>b1 a3>b1 但是统计却非常困难,因

2016-01-11 10:15:03 305

原创 319Bulb Switcher

这题是一道数学题,很有意思。关键是,一个灯亮,则表明它被动过奇数次。由题意,就是看一个数m能被1~n的多少个数整除显然,当m能被a整除时,m必然能被(m/a)整数,即成对出现!所以奇数只有一种情况,即a=m/a 从而m是一个平方数从而问题简单了。

2015-12-22 18:50:10 264

原创 214Shortest Palindrome

首先需要知道KMP,其次假设原串是s造一个新串 s#s'  其中s'是s的完全反过来然后我们只需要知道新串开头最长的回文串是什么,问题就迎刃而解了。而想要知道这个,就利用KMP中的next数组即可,且只看最后一位。比如最后一位next值为i  (我们假定这个值表示0~i和 n-i~n)之间是相同的假设n-i ~n  为 a0a1...ai根据构造知 0~i为  aiai-1

2015-12-17 19:16:54 249

原创 313Super Ugly Number

本题是264的强化版本,原版只有2,3,5三个质因子,而本版则接受任意多个质因子。这道题目也暴露了我之前做264时候的问题我264的做法每次查到一个最小值然后把它的2倍放入列表1把它的3倍放入列表2把它的5倍放入列表3依次进行下去。但是本题中,测试用例可能包含上百个质因子,同时可能会求第100000个,那么我就会插入100*100,000=1000W个数据,

2015-12-12 14:26:06 464

原创 zzoffer数组中重复的数字

在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是重复的数字2或者3。这题巧妙在告诉了数字的范围,因此做法相对巧妙。class Solution {public:    //

2015-11-27 14:39:53 198

原创 309Best Time to Buy and Sell Stock with Cooldown

仍然是买股票问题,但是加了个冷却:每次卖完股票,必须冷却一天再买。还是DP即可buy=[-999999 for x in range(l)]        sell=[-999999 for x in range(l)]        cold=[-999999 for x in range(l)]        buy[0]=-prices[0]        pos=1

2015-11-26 19:06:08 260

原创 zzoffer调整数组顺序使奇数位于偶数前面

输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。这题本来方法是很多的,但是我想到一种奇怪的基于递归的策略,受到的是归并排序的影响。我们期望得到的数组是 左半部分都是奇数,右半部分都是偶数。可以先统计一下这个数组 有多少个奇数,假设m个  另假设数组从0~n

2015-11-22 15:10:05 202

原创 287Find the Duplicate Number

这题关键是找环,更关键的是找到环的入口。另外注意n + 1 integers where each integer is between 1 and n那么 下标为0的位置的数一定不是0,那么它不会构成一个“安全环” (比如 0->1->2->3->0,并没有重复,但是3不可能到0,因为每个数在1~n之间)。所以从下标为0的位置开始找,采用快慢指针,找到环的入口即可,这个入口既然不

2015-11-17 10:56:59 203

原创 几个字符串匹配算法

BF 蛮力算法 没什么好说的,都会写KMP 关键是计算nextBM 计算 坏字符 和 好后缀Horspool  BM的简单版,只使用坏字符,但是 失配时,直接使用 目标串 的最后一位 作为坏字符 ,而BM算法使用的是 失配位作为坏字符Sunday 关注目标串中参加匹配的最末位字符的下一位字符

2015-10-12 19:09:55 299

原创 Manacher算法求回文串兼leetcode 5Longest Palindromic Substring

这题看了一下自己的做法,第一次使用DP O(N^2) 然后超时了。第二次维护一个HashSet,逐步增长求解,至少也是把问题解决了,但是效率也很一般。今天学习了一下Manacher算法,发现可以O(N),于是学习一下相关资料,实现之。 url如下。http://www.open-open.com/lib/view/open1419150233417.htmlhttp://artic

2015-10-10 14:40:59 312

原创 239Sliding Window Maximum

这题的brute force很简单,可以做到O(NK),通过是没有问题的,只是太慢。高效的方法是维护一个优先级队列,保证每次获取最大值都可以在O(1)时间完成,而每个元素进队出队仅1次,也就使得总时间是O(N)。我维护的元素是 (数值,下标) 维护下标是为了某些时刻删减元素 (当 cur_index- k== queue[0][0] 时刻,队列的头元素应该被删除)。这个优先级队列保证按

2015-09-08 20:51:28 334

原创 10Regular Expression Matching

这题是正则表达式匹配,允许使用. *两个符号。".*"可以匹配任意的字符串,需要注意。这题我做的关键是分情况考虑,做dp,f[i][j]==True表示字符串到i和模式串到j能够匹配。在模式串p中,每个字符有3种可能: 字母、"*"、"."。如果是字母,则f[i][j]=f[i-1][j-1] and s[i]==p[j] 最简单如果是".",则f[i][j]=f[i-1][j

2015-09-08 09:43:30 204

原创 240Search a 2D Matrix II

这题相比I,主要是失去了全序,一个蛮力方法可以做到MlogN或者NlogM。比较优的方法是M+N,这很容易想到是走格子,但是我开始想从左上角走,但是从左上角走,不管往下还是往右,数据都是变大的,不太好搞。看了Discussion,才发现如果从左下或者右上开始走,那么必然是一个方向减小,一个方向增加,也就是正确的方式。

2015-07-28 09:15:02 170

原创 234Palindrome Linked List

这题说最好是O(N)时间,O(1)空间。如果真要这样,只好获得中间的点,然后翻转一半,接着逐个比较即可。如果觉得改了input不好,那就再次翻转回来。不过看Discussion,似乎input最好不应该修改,哪怕可以恢复。而且一旦修改了,那么其实空间复杂度就不能算O(1)了,因此题目说额外的O(1)空间会比较好。

2015-07-28 09:12:39 223

原创 220Contains Duplicate III

Given an array of integers, find out whether there are two distinct indices i and j in the array such that the difference between nums[i] and nums[j] is at most t and the difference between i and j is

2015-07-27 19:31:08 208

原创 238Product of Array Except Self

这题的最佳答案是分别从左面右面分别计算 累计乘到自身邻居时的值最后把2个值相乘即可

2015-07-23 15:28:23 195

原创 231Power of Two

判断一个数是否是2的幂。最叼方法是位运算啊。。。。。。

2015-07-23 11:16:39 218

原创 226Invert Binary Tree

一般是不写简单题的,但是这题特殊,因为“Google: 90% of our engineers use the software you wrote (Homebrew), but you can’t invert a binary tree on a whiteboard so fuck off.”确实很简单,可以递归完成,然后注意交换left和right就行了。

2015-06-13 14:56:16 232

原创 219Contains Duplicate II

判断一个数组中是否有2个数重复,并且2个数的下标距离这题是217的升级版本,不过也就是把实现中的set换为map就可以了。每次检测一个数,先看是否在map中,如果是则看它上一次出现下标,如果跟这次比距离

2015-06-10 20:03:33 229

原创 207Course Schedule 210Course Schedule II

2道拓扑排序的题目,区别是207只需要判断是否存在,210需要输出结果,其实难度是一样的。关键在于效率,brute force怎么都可以做出来。关键在于,我们要能迅速找到 删除某些点后 ,剩下哪些点的入度为0。不难想到利用集合。首先从输入数据 获取每个点 被哪些点依赖  比如 1->2 1->3 则 1被2,3依赖(所以后面删除1后,2,3两个点的入度要-1)。接着我们维护一个

2015-05-21 14:35:12 273

原创 213House Robber II

相比198House Robber只是多了个环的条件,也就是说,原来1号和n号可以同时rob,但是现在则不行了。但是在198基础上修改也非常简单,只要dp时候第一轮时候选择不抢n号,第二轮时候选择不抢1号,两轮结果取最大值,即可。

2015-05-21 13:46:19 262

原创 211Add and Search Word - Data structure design

使用208的字典树,仅需修改查询部分,之前是完整查询,现在如果遇到".",则默认所有孩子都可以匹配成功,对所有孩子进行DFS即可,但是这样是brute force的,利用python可以得到774ms的时间,需要后续进一步改进。

2015-05-16 10:31:45 245

原创 208Implement Trie (Prefix Tree)

实现字典树,每一个Trie结点维护 (1)、自己是否是终止点 (2)、自己的各个孩子以及它们对应的字母区别search和startsWith,就是startsWith只要字符串扫描完就可以了,但是search还要求扫描完时的结点是一个终止点(代表某个单词的结束)。

2015-05-16 09:50:51 290

原创 209 Minimum Size Subarray Sum

从左往右扫描,维护一个窗口(left---right),每次右边加一个数之后,如果窗口中所有数的和小于等于给定数,则continue,否则从左边开始删除,直到删除若干个之后,窗口中所有数的和大于等于给定数,且从左边再删一个后就小于等于给定数(也就是找到了最小窗口),接着与当前维护的最小长度比较即可。

2015-05-16 09:23:33 248 1

空空如也

空空如也

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

TA关注的人

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