
LeetCode
云水谣CS
这个作者很懒,什么都没留下…
展开
-
33. Search in Rotated Sorted Array
二分法:每次判断mid所在的数段是否有序class Solution {public: int search(vector<int>& nums, int target) { int left=0,right=nums.size()-1; int mid=(left+right)/2; while(le...原创 2018-03-22 17:52:16 · 94 阅读 · 0 评论 -
81. Search in Rotated Sorted Array II
该题与Search in Rotated Sorted Array 同理,由于存在重复元素,当mid处与边缘right位置处的值相同时,若边缘位置不为target,则边缘right左移一位:class Solution {public: bool search(vector<int>& nums, int target) { int left=0,ri...原创 2018-03-23 19:50:39 · 112 阅读 · 0 评论 -
34. Search for a Range
二分法:class Solution {public: vector<int> searchRange(vector<int>& nums, int target) { vector<int> res; int left=0,right=nums.size()-1; int mid=(left+r...原创 2018-03-23 21:32:29 · 117 阅读 · 0 评论 -
278. First Bad Version
二分法:// Forward declaration of isBadVersion API.bool isBadVersion(int version);class Solution {public: int firstBadVersion(int n) { int left=1,right=n; while(left<...原创 2018-03-23 22:24:29 · 100 阅读 · 0 评论 -
374. Guess Number Higher or Lower
// Forward declaration of guess API.// @param num, your guess// @return -1 if my number is lower, 1 if my number is higher, otherwise return 0int guess(int num);class Solution {public: int g...原创 2018-03-23 22:47:51 · 109 阅读 · 0 评论 -
347. Top K Frequent Elements
class Solution {public: vector<int> topKFrequent(vector<int>& nums, int k) { vector<int> ans; unordered_map<int,int> tab...原创 2018-03-29 23:36:26 · 97 阅读 · 0 评论 -
409. Longest Palindrome
统计字符串中字符可构成回文字符串的最大长度int longestPalindrome(string s) { unordered_map<char, int> table; for (int i = 0; i<s.size(); i++) { if (table.find(s[i]) == table.end()) // not found table[s[i]...原创 2018-03-30 16:56:24 · 94 阅读 · 0 评论 -
392. Is Subsequence
判断S是否是T的一部分:1) 若s.size()>t.size(),则return false;2) 否则,从s和t首部开始遍历,若对应位置的字符相等,则s,t下标同时后移一位;否则,t下标后移一位class Solution {public: bool isSubsequence(string s, string t) { if(s.size()> t.si...原创 2018-03-30 19:23:43 · 97 阅读 · 0 评论 -
160. Intersection of Two Linked Lists
查找二个链表的第一个交叉节点:首先查询二条链表的各自长度,其次长链表上先移动长度差的步数,然后同时遍历二个链表即可:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NU...原创 2018-03-21 10:48:44 · 100 阅读 · 0 评论 -
62. Unique Paths
动态规划:F[i][j]=F[i-1]+F[i][j-1]class Solution {public: int uniquePaths(int m, int n) { int res[100][100]={0}; res[0][0]=1; for(int i=0;i<m;i++) for(int j=0;j&...原创 2018-03-25 22:17:51 · 85 阅读 · 0 评论 -
64. Minimum Path Sum
寻找从左上角到右下角的最短路劲:F(i,j)=min{arr(i,j)+f(i-1,j),arr(i,j)+f(i,j-1)}class Solution {public: int minPathSum(vector<vector<int>>& grid) { for(int i=0;i<grid.size();i++) {...原创 2018-03-26 12:32:04 · 94 阅读 · 0 评论 -
153. Find Minimum in Rotated Sorted Array
O(N)时间复杂度:顺序遍历数组 class Solution {public: int findMin(vector<int>& nums) { int pos=findPos(nums); return nums[pos]; } int findPos(vector<int>& ...原创 2018-03-21 23:06:11 · 96 阅读 · 0 评论 -
63. Unique Paths II
动态规划:F[i][j]=F[i-1]+F[i][j-1](F[i][j]=0,when grid[i][j]==1)class Solution {public: int uniquePathsWithObstacles(vector<vector<int>>& grid) { int ans[100][100]={0}; ...原创 2018-03-26 15:38:11 · 93 阅读 · 0 评论 -
455. Assign Cookies
先排序,再遍历数组:class Solution {public: int findContentChildren(vector<int>& g, vector<int>& s) { sort(g.begin(),g.end()); sort(s.begin(),s.end()); ...原创 2018-04-01 10:20:26 · 93 阅读 · 0 评论 -
452. Minimum Number of Arrows to Burst Balloons
将气球位置按照end由小到大的顺序排序,如果前后气球的范围有重叠,那么只需要一根箭,排序时间复杂度为O(nlogn),遍历时间复杂度为O(n);class Solution {public: int findMinArrowShots(vector<pair<int, int>>& points) { sort(points.begi...原创 2018-04-01 10:46:50 · 112 阅读 · 0 评论 -
435. Non-overlapping Intervals
按照end从小到大的顺序排序,观察前后interval是否有重叠: int eraseOverlapIntervals(vector<Interval>& intervals) { sort(intervals.begin(),intervals.end(),comp); int ans=0; for(int i...原创 2018-04-01 10:59:17 · 96 阅读 · 0 评论 -
【回溯】47. Permutations II
注意删除重复元素:class Solution {public: vector<vector<int>> ans; vector<vector<int>> permuteUnique(vector<int>& nums) { vector<int> temp; sort...原创 2018-04-08 22:17:49 · 92 阅读 · 0 评论 -
【贪心】763. Partition Labels
首先遍历字符串,记录并更新每一个字符最后出现的位置;再次遍历字符串,记录当前遍历过程中字符的出现最晚位置Max_pos;若Max_pos与当前下标相同,则得到一个分割阈class Solution {public: vector<int> partitionLabels(string S) { unordered_map<char,int> tab...原创 2018-04-08 22:44:30 · 167 阅读 · 0 评论 -
532. K-diff Pairs in an Array
class Solution {public: int findPairs(vector<int>& nums, int k) { if(k<0) return 0; unordered_map<int,int> table; for(int i=0;i<nums.size...原创 2018-04-01 20:19:07 · 90 阅读 · 0 评论 -
【动归】746. Min Cost Climbing Stairs
f(n)=min(f(n-1)+a[n-1],f(n-2)+a[n-2]),f(0)=0,f(1)=1class Solution {public: int minCostClimbingStairs(vector<int>& cost) { vector<int> table; table.push_back(0);...原创 2018-04-09 18:58:35 · 218 阅读 · 1 评论 -
【动归】343. Integer Break
dp[n]=max(i*dp[n-i],i*(n-i))class Solution {public: int integerBreak(int n) { vector<int> table; table.push_back(0); table.push_back(1); for(int i=2;i<=n...原创 2018-04-09 22:54:29 · 106 阅读 · 0 评论 -
【回溯】39. Combination Sum
注意去重:本解法设置每一组解的元素按照递增的原则分布,从而去重class Solution {public: vector<vector<int>> ans; vector<vector<int>> combinationSum(vector<int>& candidates, int target)...原创 2018-04-03 22:30:01 · 88 阅读 · 0 评论 -
【回溯】40. Combination Sum II
与Combination Sum同理:class Solution {public: vector<vector<int>> ans; vector<vector<int>> combinationSum2(vector<int>& candidates, int target) { vector...原创 2018-04-04 12:26:46 · 85 阅读 · 0 评论 -
【DP】5. Longest Palindromic Substring
典型的DP问题:求解字符串中长度最大的回文 子字符串。令bool table[i][j]代表字符串中i,j位置之间是否为回文,那么table[i][j]=1时当且仅当s[i]==s[j]&&table[i+1][j-1]!=0 string longestPalindrome(string s) { bool table[1000][1000]={0}; ...原创 2018-04-22 21:38:35 · 166 阅读 · 0 评论 -
【DP】413. Arithmetic Slices
求连续子数组中为等差数组的个数:设table[i]为以包含i位置元素为末端点的数组中的等差数组个数int numberOfArithmeticSlices(vector<int>& A) { int res=0; vector<int> table(A.size()); for(int i=2;i<A.size...原创 2018-04-22 22:25:26 · 96 阅读 · 0 评论 -
24. Swap Nodes in Pairs
预处理:在head之前添加一个缓冲节点,最后return head->nextpre---A--B--last变为:pre--B--A--last/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x)...原创 2018-04-13 16:07:19 · 77 阅读 · 0 评论 -
167. Two Sum II - Input array is sorted
升序数组,求其中是否有满足二数之和为target的元素利用哈希表:class Solution {public: vector<int> twoSum(vector<int>& numbers, int target) { unordered_map<int,int> table; vector<int&g...原创 2018-04-13 17:36:31 · 102 阅读 · 0 评论 -
【DP】647. Palindromic Substrings
寻找字符串中满足回文字符串的连续子字符串的数目(见注释):class Solution {public: int countSubstrings(string s) { if(s.size()==0) return 0; int len = s.size(); bool table[len][len]={0}; //表示i与j之间是否为回文字符串 int r...原创 2018-04-23 22:55:22 · 143 阅读 · 0 评论 -
【回溯】16. 3Sum Closest
回溯,当求得三数之和后,更新与target差距最小的和;class Solution {public: int res=INT_MAX-2; int threeSumClosest(vector<int>& nums, int target) { int temp=0; find(nums,temp,target,0,0); re...原创 2018-05-08 22:30:53 · 123 阅读 · 0 评论 -
575. Distribute Candies
将糖果数目平均分配给哥哥和妹妹,求出妹妹最大可分配到的糖果数目:哥哥和妹妹分配到的糖果数目均为糖果总数目的一半,在分配的同时,优先保证新糖果种类分配给妹妹即可;那么妹妹可分配到的最大种类数目即为min(糖果总类数,糖果数目一半)class Solution {public: int distributeCandies(vector<int>& candies) { ...原创 2018-04-20 22:39:35 · 194 阅读 · 0 评论 -
【DP】516. Longest Palindromic Subsequence
摘自csdn博客:1. 子问题的解如何表达?给定一个字符串,子问题是:任意一个该字符串的子串包含的回文串的长度,那么对于这个字符串的子串,我们可以用它在原字符串中的起始位置和结束位置来表示。因此,我们可以用一个二维数组来对子问题进行表示,dp[i][j]表示he longest palindromic subsequence's length of substring(i, j)。2. 大问题如何...转载 2018-04-24 23:29:22 · 116 阅读 · 0 评论 -
【位运算】89. Gray Code
vector<int> grayCode(int n) { vector<int> ans; for(int i = 0;i<pow(2,n);i++) { ans.push_back(i^(i>>1)); } return ans; }原创 2018-05-03 09:08:35 · 127 阅读 · 0 评论 -
717. 1-bit and 2-bit Characters
顺序扫描数组,遇到0前进一位;遇到1,前进二位 bool isOneBitCharacter(vector<int>& bits) { int pre; for(int i = 0;i<bits.size();i++) { if(bits[i]==0) pre=0;...原创 2018-05-03 09:10:00 · 109 阅读 · 0 评论 -
648. Replace Words
class Solution {public: string replaceWords(vector<string>& dict, string sentence) { unordered_map<string, int> table; for (int i = 0; i<dict.size(); i+...原创 2018-04-21 13:56:31 · 194 阅读 · 0 评论 -
【滑动窗口】567. Permutation in String
给定字符串s1,s2,判断s2中是否有一个窗口内的元素是s1的全排列。那么拟定一个长度为S1大小的滑动窗口,扫描S2,当窗口内的元素都是S1的元素时,即符合要求。class Solution {public: bool checkInclusion(string s1, string s2) { vector<int> table1(26); ...原创 2018-04-21 20:04:59 · 164 阅读 · 0 评论 -
【滑动窗口】438. Find All Anagrams in a String
运用滑动窗口即可:class Solution {public: vector<int> findAnagrams(string s, string p) { vector<int> table1(26); vector<int> table2(26); vector<int> res; ...原创 2018-04-21 20:06:08 · 110 阅读 · 0 评论 -
82. Remove Duplicates from Sorted List II
ListNode* deleteDuplicates(ListNode* head) { ListNode *newHead=(ListNode*)malloc(sizeof(ListNode)); newHead->next=head; ListNode *cur=newHead; ListNode *move=head; ...原创 2018-05-04 19:14:52 · 92 阅读 · 0 评论 -
【链表遍历】86. Partition List
遍历链表,把链表元素小于x和不小于x的分为二个新链表,再把二个新链表连接即可/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */cla...原创 2018-05-04 20:03:15 · 173 阅读 · 0 评论 -
【链表遍历】817. Linked List Components
遍历链表,查询当前元素是否在G内;/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public:...原创 2018-05-04 20:15:18 · 351 阅读 · 0 评论 -
【链表节点查找】61. Rotate List
类似于找到链表的倒数第k个节点,然后把前后二段链表倒置前后顺序即可;/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class S...原创 2018-05-04 23:42:58 · 159 阅读 · 0 评论