- 博客(46)
- 收藏
- 关注
原创 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
原创 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
原创 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
原创 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 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 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
原创 堆(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 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关注的人