自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 poj 3264 Balanced Lineup

基础的线段树

2015-01-29 04:56:53 279

原创 poj 3176 Cows Bowling

简单动态规划/*PROG:LANG: C++11 */#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #in

2015-01-13 14:12:55 313

原创 poj 3050 Hopscotch

对每一个点进行一次dfs

2015-01-12 03:42:26 301

原创 poj 3187 Backward Digit Sums

暴力搜索,用STL力的next_permutation很方便

2015-01-12 01:59:29 265

原创 hdoj 2544 最短路

和上一题一样也是纯的最短路/*PROG:LANG: C++11 */#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #inclu

2015-01-10 13:45:13 262

原创 hdoj 1874 畅通工程续

基本最短路优先队列+Dijkstra

2015-01-10 12:34:03 278

原创 Dijkstra 算法

使用priority_queue实现#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define

2015-01-10 11:08:02 274

原创 Leetcode Climbing Stairs

int climbStairs(int n) { int i = 1; int cur = 1, prev = 1, temp; while(i < n){ temp = cur; cur += prev; prev = temp; i++;

2015-01-02 12:32:13 220

原创 Leetcode Rotate Image

void rotate(vector > &matrix) { // flip diagnal int n = matrix.size(), i , j; for(i = 0; i < n-1; i++) for(j = 0; j < n-1-i; j++) swap(matrix[i][j],

2015-01-02 12:25:36 327

原创 Leetcode Pascal's Triangle

vector > generate(int numRows) { vector > result; for(int i = 0; i < numRows; i++){ vector next(i+1,1); for(int j = 1; j < i; j++){ next[j] = re

2014-12-31 14:43:41 231

原创 Leetcode Trapping Rain Water

水的高度又左右两边高度最大值的较小值决定,从左到右扫描一次,从右到左扫描一次 int trap(int A[], int n) { vector left(n,0); vector right(n,0); int i, maxx = 0; for(i = 0; i < n; i++) left[i]

2014-12-31 14:31:18 249

原创 Leetcode First Missing Positive

int firstMissingPositive(int A[], int n) { for(int i = 0; i < n;){ if(A[i] != i+1 && A[i] = 1 && A[A[i]-1] != A[i]) swap(A[i], A[A[i]-1]); else i++; } f

2014-12-31 14:13:45 208

原创 Leetcode Swap Nodes in Pairs

ListNode *swapPairs(ListNode *head) { ListNode dummy(-1); dummy.next = head; ListNode *cur = head; ListNode *prev = &dummy; ListNode *p; while(prev -> n

2014-12-30 13:43:55 289

原创 Single Number II

位运算

2014-12-22 11:42:33 241

原创 Leetcode Single Number

int singleNumber(int A[], int n) { int ans = 0; for(int i = 0 ; i < n; i++){ ans ^= A[i]; } return ans; }

2014-12-22 11:35:05 215

原创 Leetcode Majority Element

感觉Leetcode出书了以后judge速度快了不少,但是新出的题目质量不大好Given an array of size n, find the majority element. The majority element is the element that appears more than ⌊ n/2 ⌋ times.You may assume that the

2014-12-22 10:39:03 539

原创 Leetcode Letter Combinations of a Phone Number

深搜 string keys [10] = {" ", "", "abc", "def", "ghi", "jkl", "mno", "pqrs","tuv", "wxyz"}; void dfs(vector &result, str

2014-12-22 10:34:37 262

原创 Leetcode 3Sum Closest

和3Sum没什么区别,记录最小gap int threeSumClosest(vector &num, int target) { int b, c, n = num.size(); int sum = num[0] + num[1] + num[2]; sort(num.begin(), num.end()); i

2014-12-22 10:08:10 280

原创 Leetcode 3Sum

这题难度主要在如何避免重复上, 我们假设三个数的index分别为a, b, c以下几种情况可能导致重复的产生1. 第一个数导致的重复,num[a] == num[a-1], 后面相同的b,c的组合会导致答案重复一遍2. 第二个数和第三个数导致的重复,重复只发生在找到一个答案以后,所以只需要确认b++,c--到一个不同的数就可以了

2014-12-22 09:13:29 551

原创 Leetcode Longest Common Prefix

对c++太不熟悉了,判断是否输入valid错了好几次,没想到优于O(mn)的方法

2014-12-21 16:01:19 297

原创 Leetcode Roman to Integer

用了一下template来打表

2014-12-21 15:41:36 530

原创 Leetcode Integer to Roman

int indexOf(char ROMAN[7], char c){ for(int i = 0; i < 7; i++){ if(ROMAN[i] == c) return i; } return 0; } string intToRoman(int num) {

2014-12-19 13:53:41 252

原创 Leetcode Container with Most Water

左右夹逼,每一次都挪动较短的板子 int maxArea(vector &height) { int i = 0, j = height.size()-1; int maxx = 0; int temp = 0; // assume no overflow while(i < j)

2014-12-19 12:43:03 304

原创 Leetcode String to Integer (atoi)

1. 如果输入不合法,输出02. 正负判断3. 溢出输出INT_MAX or INT_MIN4. 忽略最后的字母

2014-12-19 12:19:29 218

原创 Leetcode ZigZag Conversion

Leetcode ZigZag Conversion

2014-12-19 08:07:14 280

原创 Leetcode Longest Palindromic Substring

以每个元素为中心点往两边找回文,这一题用dp并不方便。有奇数长度和偶数长度两种情况

2014-12-18 14:45:37 317

原创 Leetcode Longest Substring Without Repeating Characters

有几点需要向面试官问清楚:1. 是26个字母还是ascii字符2. 是否区分大小写解题思路:开一个长度为256的数组记录每一个字符出现的位置,如果出现重复就把字符串起始位置设置成i+1, 并计算当前字符串的长度,和max进行比较,保留最大值。别忘记最后一个字符串末尾还要比较一次。可能的follow up: 如果每个字符允许出现两次,如何求解,大致思路相同,记录两个位置。

2014-12-18 13:24:31 317

原创 Leetcode Reverse Integer

OJ要求溢出返回0而不是溢出的数,不错一次咋能知道要求是0。。。。 int reverse(int x) { const int MAX = 0x7FFFFFFF; bool negative = x < 0; if (negative) x = -x; long long ans = 0;

2014-12-18 09:14:36 216

原创 poj 2431 Expedition

求最少的加油次数,贪心的思想每次加油都尽可能加多的油。所以经过的加油站的油存在一个最大堆里,加油后pop()在poj 3253里实现过堆了,就用了priority_queue一个让代码稍微简洁一些的技巧是添加第N+1个加油站,距离0, 油量0/*PROG: ExpeditionLANG: C++11 */#include #include #include #in

2014-12-17 22:50:30 329

原创 poj 3253 Fence Repair (堆的方法)

2014-12-17 14:46:52 372

原创 堆(heap)的实现

key concept:1. left child: 2i+1, right child: 2i+22. insert an element: add to the end and move up3. delete: move the last element to root and move down

2014-12-17 14:18:46 268

原创 poj 3253 Fence Repair

贪心,类似霍夫曼编码每次找出 最短的两个plank合并并加入集合中, 总共需要合并N次,每一次查找最短plank需要O(N)。参考了别人代码,对时间常数进行优化才能AC(记录位置并不交换)/*PROG: Fence RepairLANG: C++11 */#include #include #include #include #include #include

2014-12-17 10:35:19 361

原创 poj 3069 Saruman's Army

贪心覆盖不下了就放一个新的点,一直到遍历完数组为止/*PROG: Saruman's ArmyLANG: C++11 */#include #include #include #include #include #include #include #include #include #include #include #include #include

2014-12-17 08:30:46 332

原创 hdoj 1002 A+B Problem II

原来一直比较烦大数题,写了两个慢慢好了,几点注意以下1.变量名以后要养成习惯和规律2. printf输出string要转换成c_str()/*PROG:A + B ProblemLANG: C++11 */#include #include #include #include #include #include #include #include #in

2014-12-10 14:42:48 318

原创 hdoj 1207 汉诺塔II

动态规划:分拆成两个子问题,N个圆盘移动,可以分成两个小的圆盘堆,其中一个圆盘堆较大,另一个较小,较小的圆盘仍为四柱汉诺塔问题,较大的圆盘堆只能使用三个柱子,根据题目,由2^N-1的通项公式。dp[n] = min(dp[i] * 2 + pow2(n-i) -1), for i = 0.....n-1

2014-12-10 13:05:23 429

原创 hdoj 1041 Computer Tranformation

找规律+大数加法, a[i] = a[i-2] + a[i-1];

2014-12-10 09:13:45 381

原创 hdoj 1280 前M大的数

最开始的思路是: 最大的和肯定由原始序列种最大的前K个数两两组合产生,由于M <= 1000, 所以输入序列中的前50个数就够用了(50*49/2 = 1225 > 1000)。 然后用两次stl里的排序就能求出最大的M个数了,不知道为啥一直WA。 只好写了个counting sort AC了。

2014-12-06 14:08:16 316

原创 hdoj 1158 Employment Planning

dp, 注意判断不可达的点。dp[i][j] 表示第i个月雇佣j个员工的最小cost,分别可以又上一个月裁员和雇人得到,选择最优的,复杂度O(n^3).

2014-12-06 02:53:34 348

原创 hdoj 1058 Humble Number

主要的思想就是dp, 转移方程不大明显,但是比较容易想。 下一个丑数由之前的丑数乘{2,3,5,7}中最小且大于上一个数的数得到。先把所有数算出来然后打表输出。输出太恶心了,还考人英语。。/*PROG: humble numberLANG: C++11 */#include #include #include #include #include #include #

2014-12-03 13:48:51 339

原创 USACO: Superprime Rib

题目链接:http://www.nocow.cn/index.php/Translate:USACO/sprime分析:很直观的深搜第一章最后两题都和以质数为背景, 用变长vector存储已知质数的方法,判断 10^9+7 的耗时大约0.01s。 10^8-7的时间约0.05s。 可以方便以后估算。/*PROG: sprimeLANG: C++11 */#include #i

2014-11-27 14:29:03 384

空空如也

空空如也

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

TA关注的人

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