- 博客(29)
- 资源 (9)
- 收藏
- 关注
原创 LeetCode之Kth Largest Element in an Array
/*分治法,采用快排中用到的partition函数。*/class Solution {public: int findKthLargest(vector& nums, int k) { int left = 0, right = nums.size()-1; while(left <= right){ int res = fin
2015-09-28 18:39:48 434
原创 LeetCode之N-Queens
/*深度搜索。*/class Solution {public: vector> solveNQueens(int n) { vector > res; if(n < 1) return res; vector path; vector > res_num; dfs(res_num, path, n, 0)
2015-09-27 17:12:21 367
原创 LeetCode之Unique Paths
/*备忘录法。*/class Solution {public: int uniquePaths(int m, int n) { if(m < 1 || n < 1) return 0; vector > path(m+1, vector(n+1, 0)); for(int i = 1; i <= m; ++i){ for(int j = 1; j <= n; ++j){
2015-09-27 16:36:10 366
原创 LeetCode之Palindrome Partitioning
/*采用深度搜索算法。写法一。*/class Solution {public: vector> partition(string s) { vector > res; if(s.empty()) return res; vector path; partition(s, res, path, -1, 0); return res; } void partitio
2015-09-27 14:58:09 341
原创 LeetCode之Number of Digit One
/*针对每一个数字位进行考虑,例如123N45,考虑所有N为1的数字的数目。根据N取值,N对应为1的数目为(left为N左边的数字,right表示N右边的数字):f(N) = left*100 (N = 0)f(N) = left*100 + right+1 (N = 1)f(N) = (left+1)*100 (N > 1)*/class Solution {public:
2015-09-10 23:05:59 395
原创 LeetCode之Integer to English Words
/*按照提示,将原来数字分成3个一组,每个组内数字字符串化,然后再组合起来。*/class Solution {public: string numberToWords(int num) { string units[4] = {"", " Thousand", " Million", " Billion"}; int i = 0; st
2015-09-09 10:44:39 336
原创 LeetCode之Basic Calculator II
/*用两个辅助vector来进行运算,一个存符号,一个存数字。*/class Solution {public: int calculate(string s) { if(s.empty()) return 0; vector op; vector num; for(size_t i = 0; i < s.size();)
2015-09-09 09:40:54 368
原创 LeetCode之Compare Version Numbers
/*解题思路:比较每个.之间的数字即可,但是题中有一些小trick,需要注意。*/class Solution {public: int compareVersion(string version1, string version2) { size_t i1 = 0, i2 = 0; size_t left1 = 0, left2 = 0; int n1, n2
2015-09-08 20:13:58 310
原创 LeetCode之Reverse Words in a String
class Solution {public: void reverseWords(string &s) { if(s.empty()) return; //删除字符串头尾连续的空格 while(s[s.size()-1] == ' ') s.erase(s.end()-1, s.end()); while(s[0] ==
2015-09-08 17:12:58 293
原创 LeetCode之Shortest Palindrome
/*为了获取最短的回文串,需要找到字符串从头开始的最长回文子串,然后取剩下部分的字符串的逆序加到字符串的前头,即可获得最短回文子串。所以解决该问题的关键部分是寻找以第一个字符开始的最长回文子串,有以下几种方法:1.采用暴力查找,大数据下会超时。2.借用KMP算法来寻找最长回文子串,即本代码中所用方法;3.采用Manacher算法。*/class Solution {public:
2015-09-07 17:09:46 334
原创 LeetCode之Longest Palindromic Substring
/*用dp[i][j]表示子串s[i...j]是否为回文,则有dp[i][j] = d[i+1][j-1] && s[i] == s[j](i+1 < j);dp[i][j] = (s[i] == s[j])(i+1 == j)并且,dp[i][i] = true;。*/class Solution {public: string longestPalindrome(string s)
2015-09-03 19:17:40 276
原创 LeetCode之Power of Two
/*方法一:用2除。*/class Solution {public: bool isPowerOfTwo(int n) { if(n < 1) return false; while(n != 1){ if((n & 1) != 0) return false; n /= 2; }
2015-09-02 20:28:37 264
原创 LeetCode之Pow(x, n)
/*直接模仿数学中的乘幂算法。*/class Solution {public: double myPow(double x, int n) { if(n == 0) return 1.0; else if(fabs(x) < 1e-10) return 0.0; else{ if(n > 0){ if(x > 0.0) return myPowPositive(x
2015-09-02 17:13:59 304
原创 LeetCode之Rectangle Area
/*根据题意,两种情况:1)两个矩形不相交,直接返回两个矩形的面积之和;2)两个矩形相交,返回两个矩形面积之和与交集的面积差。*/class Solution {public: int computeArea(int A, int B, int C, int D, int E, int F, int G, int H) { int area0 = (C-A) * (
2015-09-02 16:38:35 301
原创 LeetCode之Sqrt(x)
/*通过二分法搜索。但是要注意两个数相乘可能会大于int能表示的最大值,所以程序中采用long long型数据。*/class Solution {public: int mySqrt(int x) { if(x == 0) return 0; long long left = 1, right = x; while(left < ri
2015-09-02 16:12:08 255
原创 LeetCode之Ugly Number II
/*根据提示,保存一个有序的丑数数组,然后通过不断乘以2,3,5,从中选出最小的数作为下一个丑数。*/class Solution {public: int nthUglyNumber(int n) { vector uglies(1, 1); //uglies.reserve(n); int i2(0), i3(0), i5(0);
2015-09-02 15:41:52 277
原创 LeetCode之Ugly Number
/*判断一个数是否为Ugly Number。如果该数本身为1,2,3,5,那么它即为Ugly Number。否则,判断这个数是否能被2,3,5整除。如果能,则除以2,3,5,然后判断它除过之后的数,否则它不为Ugly Number。*/class Solution {public: bool isUgly(int num) { if(num <= 0) retur
2015-09-02 14:07:56 245
原创 LeetCode之 Delete Node in a Linked List
/*由于不知道前驱结点,因此无法删除当前结点的。为了完成题目中的要求, 唯有一个办法:用后面结点的值将当前结点的值覆盖掉。*/class Solution {public: void deleteNode(ListNode* node) { if(node == nullptr || node->next == nullptr) return; Lis
2015-09-02 10:31:43 272
原创 LeetCode之Intersection of Two Linked Lists
/*思路: 1.找到两个链表的长度; 2.根据这两个链表的长度差,使较长的那个链表向前走相应长度。 3.同时扫描两个链表,寻找它们的交叉节点。*/class Solution {public: ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) { if(headA == nullptr
2015-09-02 10:17:09 282
原创 LeetCode之Palindrome Linked List
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ /*思路:为了判断链表是否为回文,需要对比链表中第一个、倒数第一个,第二个、倒数
2015-09-02 09:47:55 243
原创 LeetCode之Remove Linked List Elements
class Solution {public: ListNode* removeElements(ListNode* head, int val) { if(head == nullptr) return head; ListNode *pre, *p; while(head != nullptr && head->val == val){
2015-09-02 09:01:25 273
原创 LeetCode之Reverse Linked List
/*链表的头插法。*/class Solution {public: ListNode* reverseList(ListNode* head) { if(head == nullptr || head->next == nullptr) return head; ListNode node(-1); node.next = head;
2015-09-02 08:43:26 291
原创 LeetCode之Count Primes
/*根据提示求解。*/class Solution {public: int countPrimes(int n) { bool mark[n]; memset(mark, 1, sizeof(mark)); int sqrt_n = sqrt(n); for(int i = 2; i <= sqrt_n; ++i){
2015-09-01 21:46:58 294
原创 LeetCode之Repeated DNA Sequences
/*本题最直观的想法是用Hash Table存储起连续的10个字符串,但是这样会超出内存限制。所以用一个数字代替A/C/GT,减少内存消耗。*/class Solution {public: vector findRepeatedDnaSequences(string s) { vector letters(256, 0); letters['A'] = 0; letters[
2015-09-01 21:24:42 330
原创 LeetCode之Fraction to Recurring Decimal
/*思路:1.计算整数部分;这里主要注意,分子绝对值小于分母绝对值且分子分母异号时,要返回“-0”。2.计算小数部分;思路:用一个hash表记住出现过的余数以及余数对应的位置,如果当前用于计算 小数的余数在hash表中存在,则应返回结果,注意添加循环小数的括号。3.合并整数、小数部分,返回结果。整体来说,思路相对简单,但是写代码时有很多细节需要注意。*/class Solution
2015-09-01 11:23:53 404
原创 LeetCode之Happy Number
/*用一个Hash表记录出现过得数字。采用如下步骤获得结果:从当前正数n开始,1)如果n == 1,则它为happy number,返回true,结束。2)如果n != 1, 且hash表中有等于n的数字,会陷入循环,返回false,结束。3)如果n != 1,且hash表中没有等于n的数字,则将n加入hash表,继续计算下一个n。重复。*/class Solution {public:
2015-09-01 10:21:24 339
原创 LeetCode之Isomorphic Strings
/*从s->t映射可以,用hash记住每个映射,判断是否能从s->t进行映射。反过来,再判断是否能从t->进行映射,只有能进s->t和t->的映射,才是同构的。*/class Solution {public: bool isIsomorphic(string s, string t){ return s2t(s, t) && s2t(t, s); }
2015-09-01 10:02:18 267
原创 LeetCode之Longest Substring Without Repeating Characters
class Solution {public: int lengthOfLongestSubstring(string s) { vector loc(256, -1); int start = -1, res(0); for(int i = 0; i < s.size(); ++i){ if(loc[s[i]] >
2015-09-01 09:45:13 218
原创 LeetCode之Valid Anagram
/*Hash Table. 时间复杂度O(n).用一个Hash表记录s中每个字母出现的次数,然后在扫描t数组检查它们字母个数是否一样。*/class Solution {public: bool isAnagram(string s, string t) { unordered_map count; for(int i = 0; i < s.size(
2015-09-01 09:14:41 257
cubic convolution/bilinear/nearest image resize matlab实现
2018-04-29
Image Sensors and Signal Processing for Digital Still Cameras
2018-03-03
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人