![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
LeetCode
IMapMap
这个作者很懒,什么都没留下…
展开
-
LeetCode : Single Number
第一种方法,用哈希表。map<int, int>ary;for (int i = 0; i < n; i++){ if (ary.find(A[i]) == ary.end()) ary.insert(pair<int, int>(A[i], i)); else ary.erase(A[i]);}map<int, int>::iterator原创 2015-03-16 10:47:09 · 318 阅读 · 0 评论 -
LeetCode : Minimum Path Sum
int Solution::minPathSum(vector<vector<int>>& grid){ if(grid.size() == 0 || grid[0].size() == 0) return 0; for(int i = 1; i < grid.size(); i++) grid[i][0] += grid[i - 1][0];原创 2016-10-01 16:35:46 · 215 阅读 · 0 评论 -
LeetCode : Word Pattern
pattern和substr的对应应该是双向的,因此设置双向的比较。Solutionbool wordPattern(string pattern, string str){ map<char, string> m; map<string, char> p; int begin = 0, end = 0; int index = 0; string token原创 2016-10-26 19:48:01 · 202 阅读 · 0 评论 -
LeetCode : Bulls and Cows
Solution 1// int to stringstring int2string(int num){ stringstream ss; ss << num; return ss.str();}string getHint(string secret, string guess){ int bullCnt = 0, cowCnt = 0, cnt = 0;原创 2016-10-26 20:59:08 · 210 阅读 · 0 评论 -
LeetCode : Find Peak Element
要求log2nlog_2n的复杂度首先考虑二分法。int findPeakElement(vector<int>& nums){ if(nums.size() == 1) return nums[0]; int begin = 0, end = nums.size() - 1; while(begin < end) { if(end -原创 2016-10-01 17:29:22 · 214 阅读 · 0 评论 -
LeetCode : Find Minimum in Rotated Sorted Array
使用二分查找。int findMin(vector<int>& nums){ int begin = 0, end = nums.size() - 1; while(begin < end) { int mid = (begin + end) / 2; if(mid == begin) // 只剩两个数的时候 retur原创 2016-10-01 19:49:42 · 199 阅读 · 0 评论 -
Leetcode : Maximum Product Subarray
第一种特别麻烦的解法:先把数组按照0划分成一段一段的,然后根据每段负数值的个数,来求每段的最大乘积。int maxProduct(vector<int>& nums){ vector<int> minusRec; vector<int> zeroRec(1, -1); vector<int> prodRec; // 每段的乘积 int res = nums[0];原创 2016-10-17 14:19:50 · 227 阅读 · 0 评论 -
LeetCode : Intersection of Two Arrays II
第一种方法是把数组放在map中进行比较。 第二种方法是将数组排好序后一次比较。Solution 1vector<int> Solution::intersect(vector<int>& nums1, vector<int>& nums2){ vector<int> result; map<int, int> m; for(int i = 0; i < nums1.size原创 2016-10-18 18:53:39 · 258 阅读 · 0 评论 -
LeetCode : Longest Palindrome
Solution 1 使用mapint longestPalindrome(string s){ int cnt = 0; map<char, int> m; for(int i = 0; i < s.length(); i++) { if(m.find(s[i]) == m.end()) { m[s[i]] =原创 2016-11-02 10:01:32 · 345 阅读 · 0 评论 -
LeetCode : Sort Characters By Frequency
Solution 1 - O(nlogn)先把字符串排序,再统计次数。string frequencySort(string s){ if (s.length() < 3) return s; sort(s.begin(), s.end()); // 把s中的字符排序,相同的字符放在一起 vector<string> rec(s.length());原创 2016-12-01 17:22:47 · 300 阅读 · 0 评论 -
LeetCode : Top K Frequent Elements
Solution - O(n)vector<int> topKFrequent(vector<int>& nums, int k){ // 统计每个数字的频率 unordered_map<int, int> rec; for(int i = 0; i < nums.size(); i++) rec[nums[i]]++; // 按频率存放数字原创 2016-12-02 15:02:00 · 253 阅读 · 0 评论 -
LeetCode : Merge Sorted Array
主要是要注意m和n的含义。m和n表示排好序的部分的长度。void merge(vector<int>& nums1, int m, vector<int>& nums2, int n){ // 两个数组倒着比,从后往前填充 int i = m - 1, j = n - 1; int index = m + n - 1; while(i >= 0 && j >= 0)原创 2016-10-01 16:12:27 · 193 阅读 · 0 评论 -
LeetCode : Contains Duplicate II
直接用遍历会超时,所以要先排序,连同初始index一起排序。bool containsNearDuplicate(vector<int>& nums, int k){ if(nums.size() < 2) return false; vector<int> index; for(int i = 0; i < nums.size(); i++)原创 2016-10-01 15:54:02 · 337 阅读 · 0 评论 -
LeetCode : Contain Duplicate
bool containsDuplicate(vector<int>& nums){ set<int> copy(nums.begin(), nums.end()); if(copy.size() != nums.size()) return true; return false;}原创 2016-10-01 15:52:08 · 286 阅读 · 0 评论 -
LeetCode : Two Sum
第一种方法是直接双指针遍历。第二种方法是向哈希表中记录。vector<int> twoSum(vector<int>& nums, int target){ vector<int> res; map<int, int> rec; for(int i = 0; i < nums.size(); i++) { if(rec.find(nums[i]) !=原创 2016-09-24 19:40:54 · 201 阅读 · 0 评论 -
LeetCode : Rotate Array
主要是C++ 11中Vector的一些用法.void rotate(vector<int>& nums, int k){ int len = nums.size(); k = k % len; //取余 if(k == 0) return; vector<int> rec(nums.end() - k, nums.end()); nums.in原创 2016-09-24 20:28:20 · 246 阅读 · 0 评论 -
LeetCode : Rotate Function
方程间递归关系原创 2016-09-25 16:03:17 · 289 阅读 · 0 评论 -
LeetCode : Pascal's Triangle
常规原创 2016-09-25 16:24:08 · 225 阅读 · 0 评论 -
LeetCode : Pascal's Triangle II
Pascal's Triangle原创 2016-09-26 16:44:00 · 258 阅读 · 0 评论 -
LeetCode : Remove Duplicates from Sorted Array
常规方法是使用双指针。int removeDuplicates(vector<int>& nums){ if(nums.size() < 2) return nums.size(); int left = 1; while(left < nums.size()) { if(nums[left] == nums[left - 1])原创 2016-09-27 19:00:03 · 256 阅读 · 0 评论 -
LeetCode : Majority Element
思路1数组经过快速排序,返回数组中间的值。超时。(直接使用sort函数会通过,而且比哈希表快)void myQuickSort(vector<int>& nums, int begin, int end){ if(begin < end) { int l = begin, r = end; int flag = nums[l]; whi原创 2016-09-29 20:50:23 · 231 阅读 · 0 评论 -
LeetCode : Plus One
vector<int> plusOne(vector<int>& digits){ int d = 1; for(int i = digits.size() - 1; i >= 0; i--) { int sum = digits[i] + d; digits[i] = sum % 10; d = sum / 10;原创 2016-09-29 20:51:45 · 229 阅读 · 0 评论 -
LeetCode : MoveZeroes
void moveZeroes(vector<int>& nums){ int cnt = 0; for(int i = 0; i < nums.size(); i++) { if(nums[i] != 0) { nums[cnt] = nums[i]; cnt++; }原创 2016-09-30 16:42:21 · 259 阅读 · 0 评论 -
LeetCode : Best Time to Buy and Sell Stock
一串数字根据大小看成高低起伏的序列。用后面的峰值减去前面的谷值可以得到最大差值。int Solution::maxProfit(vector<int>& prices){ if(prices.size() < 2) return 0; int min_index = 0, max_index = 0; int min = prices[0]; int原创 2016-09-30 17:18:43 · 205 阅读 · 0 评论 -
LeetCode : Find All Numbers Disappeared in an Array
给定一个长度为nn的数组,数组内整数范围为[1,n][1,n],元素允许重复,要求找[1,n][1,n]中出没有出现给给定数组中的元素,且不使用更多空间,时间复杂度O(n)O(n)。思路数组中的每个元素都表示一个数组中的位置,遍历第一遍数组:将每个元素对应位置的数值标记为负;遍历第二遍数组:元素为正的位置编号是没有出现的元素。Solutionvector<int> findDisappearedNu原创 2016-12-21 18:30:27 · 339 阅读 · 0 评论