算法
文章平均质量分 51
shiyang6017
这个作者很懒,什么都没留下…
展开
-
leetcode 502. IPO
multiset 与 priority_queue 联系: 可以实现 大小顶堆;区别: 删除元素时,multiset 会把相同元素值都删除!!代码 1 :(Accept) class Solution {public: int findMaximizedCapital(int k, int W, vector& Profits, vector& Capitals) {原创 2017-02-09 19:08:25 · 648 阅读 · 0 评论 -
418 Sentence Screen Fitting
class Solution { // 利用一个数组记录从0。。。col - 1位置开始排列setences时,最后一个string的位置public: int getNumber(vector setences, int row, int col) { vector> record(col); int whichRow, whichCol; for (int star原创 2016-10-10 22:23:11 · 660 阅读 · 0 评论 -
leetcode 318. Maximum Product of Word Lengths
class Solution { // bitmappublic: int maxProduct(vector& words) { vector bitmap(words.size(),0); for (int i = 0; i < words.size(); ++i) for (int j = 0; j < words[i原创 2016-09-08 17:00:42 · 200 阅读 · 0 评论 -
220. Contains Duplicate III
class Solution { // 木桶原理public: bool containsNearbyAlmostDuplicate(vector& nums, int k, int t) { if ( k < 1 || t < 0 ) return false; const long long startPos = 0x8原创 2016-09-08 16:31:05 · 183 阅读 · 0 评论 -
leetcode 368. Largest Divisible Subset
1.基本思路:如果A 是满足题意要求的一个集合(不一定是最优集合),即A的任意元素属于数组nums, 且任意两个属于A的元素Si, Sj 满足条件:Si%Sj等于0 或 Sj%Si等于0; 假设Sk是当前集合A中的最大值,若存在一个元素elem( elem也属于nums ),且elem%Sk 等于 0,当将elem加入A形成新的子集A‘, 则A’也同样满足题意要求,不断“填充”集合A,则可以找原创 2016-07-30 12:52:43 · 178 阅读 · 0 评论 -
147. Insertion Sort List
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution { // 利用链表进行插入排序public:原创 2016-09-07 18:37:11 · 209 阅读 · 0 评论 -
115. Distinct Subsequences
class Solution {public: int numDistinct(string s, string t) { if (s.empty() || t.empty()) return 0; vector> dp(s.size(), vector(t.size(), 0)); for (int si = 0;原创 2016-09-07 17:20:32 · 181 阅读 · 0 评论 -
Lowest Common Ancestor of a Binary Tree
Lowest Common Ancestor of a Binary Tree/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), lef原创 2015-11-12 21:38:01 · 239 阅读 · 0 评论 -
Longest Substring Without Repeating Characters
题意: Given a string, find the length of the longest substring without repeating characters. For example, the longest substring without repeating letters for “abcabcbb” is “abc”, which the length is 3.原创 2015-11-19 13:01:00 · 272 阅读 · 0 评论 -
Minimum Height Trees
题目: https://leetcode.com/problems/minimum-height-trees/ 思路: 所求结点为最长路径上的中间结点, 每次删除所有的叶子结点,多次删除后,最后剩下的就是中间结点class Solution {public: vector<int> findMinHeightTrees(int n, vector<pair<int, int>>& e原创 2015-11-29 20:02:35 · 247 阅读 · 0 评论 -
leetcode Path Sum II
题目:Given a binary tree and a sum, find all root-to-leaf paths where each path’s sum equals the given sum. 代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNo原创 2015-11-27 12:00:21 · 232 阅读 · 0 评论 -
leetcode 312 Burst Balloons
题意: Given n balloons, indexed from 0 to n-1. Each balloon is painted with a number on it represented by array nums. You are asked to burst all the balloons. If the you burst balloon i you will get num原创 2015-12-04 14:04:59 · 370 阅读 · 0 评论 -
leetcode 373. Find K Pairs with Smallest Sums
思路: 1. 利用数组mark记录nums1中每个元素[i]当前与nums2中关联的位置[ji],初始关联状态为[0, 0], [1, 0], … , [i, 0], …, [nums1.size()-1,0]; 2. 利用小顶堆比较这nums1.size()个状态对应的值( nums1[i]+nums2[ji] ),找出当前的最小值。更新mark[min]的值,并将(nums1[min]原创 2016-09-19 21:29:10 · 217 阅读 · 0 评论 -
leetcode 372. Super Pow
// 比二分法效率高class Solution {public: int superPow(int a, vector& b) { long long ret = 1; for (int i = 0; i < b.size(); ++i) { ret = power(ret, 10) * power(a, b[i]) %转载 2016-07-29 15:24:42 · 294 阅读 · 0 评论 -
leetcode 354. Russian Doll Envelopes
思路:1. 按宽度对envelops进行升序排列,对相同宽度的envelops按长度降序排列2. 对重新排好序的envelops,求最长严格升序的envelops长度序列代码:/* * */class Solution {public: int maxEnvelopes(vector>& envelopes) { if (envelopes原创 2016-08-01 20:42:42 · 223 阅读 · 0 评论 -
trie
struct TrieNode { const static unsigned LETTERS_NUM = 26; bool hasString; struct TrieNode* next[LETTERS_NUM]; TrieNode() : hasString(false) { for (int i = 0; i < LETTERS_NUM; ++i) next[i] =原创 2016-09-26 21:36:32 · 205 阅读 · 0 评论 -
leetcode 67.Minimum Window Substring
/ 双指针, 哈希表class Solution {public: string minWindow(string s, string t) { vector cnt(128, 0); for (int e : t) { cnt[e]++; } int begin, minWindowLen = INT_MAX; int tLen = t.size(); for (in原创 2016-09-27 15:06:36 · 158 阅读 · 0 评论 -
leetcode 221. Maximal Square
class Solution {// 最大正方形面积 public: int maximalSquare(vector>& matrix) { if (matrix.empty()) { return 0; } long len = 0; vector> dp(matrix.size(), vector(matrix[0].size(),原创 2016-09-27 19:59:55 · 199 阅读 · 0 评论 -
leetcode 503. Next Greater Element II
题意:给定一个环形数组 nums, 对于每个元素e,找出e右边出现的第一个e',满足e‘ > e,若不存在e‘,令e’ 等于 1;Example:给定 nums = {1, 2, 1},返回 {2,-1, 2} 思路:1. 从右向左利用栈保持一个升序数组 sta,若第 i 个元素与 sta 的头元素相比:a. nums[i] >= sta.top(), sta循环弹出头元原创 2017-02-09 16:25:10 · 1198 阅读 · 0 评论 -
leetcode 435. Non-overlapping Intervals
/** * Definition for an interval. * struct Interval { * int start; * int end; * Interval() : start(0), end(0) {} * Interval(int s, int e) : start(s), end(e) {} * }; */static b原创 2016-10-30 22:43:23 · 416 阅读 · 0 评论 -
leetcode facebook 面试题 Merge two interval lists
题意:Given A and B two ascending sorted interval lists, A has no overlap inside A and B has no overlap inside B. Write the function to merge two interval lists, output the result with no overlap. As原创 2016-10-19 18:34:14 · 1463 阅读 · 0 评论 -
leetcode facebook面试 convert bst to double-linked list
题意:convert bst to double-linked list代码:struct BSTree { BSTree(int v) :val(v), left(NULL), right(NULL) {} ~BSTree() { if (left) delete left; if (right) delete right; } int val; BSTree*原创 2016-10-19 22:15:54 · 698 阅读 · 0 评论 -
leetcode face面试题 Minimal run time scheduler
题意:Given a task sequence tasks such as ABBABBC, and an integer k, which is the cool down time between two same tasks. Assume the execution for each individual task is 1 unit.For example, i原创 2016-10-19 20:11:48 · 1659 阅读 · 0 评论 -
leetcode 410 Split Array Largest Sum
二分查找:个人总结的二分查找有两种: 1、二分对象为索引。例如,有序表查找某个元素的存在性2、二分对象为值(所求值)。例如,本题。先确定ret的范围[low,high],然后,不断验证ret,从而缩小范围class Solution {public: int splitArray(vector& nums, int m) { long high = 0, lo原创 2016-10-06 22:47:10 · 1040 阅读 · 0 评论 -
leetcode 227. Basic Calculator II
class Solution {public: int calculate(string s) { istringstream in('+' + s + '+'); // 这一步很好,简化了问题 int ret = 0; int num; int partial = 0; char op; w原创 2016-09-29 22:35:43 · 231 阅读 · 0 评论 -
最长重复子串(可重叠)
void getNext(vector& next, const string& s) { // 利用KMP算法求解,时间复杂度O(n*n) next.resize(s.size() + 1); // 多加一位 next[0] = -1; int k = -1, i = 0; while ( i < s.size()) { if (k == -1 || s[i] == s[k] )原创 2016-09-28 09:47:16 · 428 阅读 · 0 评论 -
树状数组求区间和
#define lowbit(i) ( -i & i) // 二进制数字最低位'1'和其后'0'组成的数字templateclass BinaryIndexedTree {public: BinaryIndexedTree(const vector& arr) :LEN(arr.size()){ BuildBIT(arr); } ~BinaryIndexedTree() {原创 2016-08-22 22:42:35 · 503 阅读 · 0 评论 -
树状数组求区间最值
#define lowbit(i) (-i & i) // 二进制数字最低位'1'和其后'0'组成的数字templateclass BinaryIndexedTree {public: BinaryIndexedTree(const vector& arr) :LEN(arr.size()) { ori = arr; ori.insert(ori.begin(), INT_MA原创 2016-09-29 16:33:57 · 996 阅读 · 0 评论 -
leetcode 212. Word Search II
trie + backtrackingclass Solution {public: vector findWords(vector>& board, vector& words) { TrieNode* root = new TrieNode(); for (auto str : words) insert(root, str); visited.resize(board原创 2016-09-26 21:06:39 · 334 阅读 · 0 评论 -
最长不重复子串
int theLongestSubstring(const string& str) { vector visited(128, false); // 英文字符, hashTable int ret = 0, head = 0, tail = 0; for (; head < str.size();) { if (visited[str[head]]) { re原创 2016-09-28 14:26:00 · 159 阅读 · 0 评论 -
leetcode 438. Find All Anagrams in a String
题意:Given a string s and a non-empty string p, find all the start indices of p's anagrams in s.Strings consists of lowercase English letters only and the length of both strings s and p will n原创 2016-10-23 13:43:38 · 1087 阅读 · 0 评论 -
leetcode 439. Ternary Expression Parser
题意:Given a string representing arbitrarily nested ternary expressions, calculate the result of the expression. You can always assume that the given expression is valid and only consists of digits原创 2016-10-23 13:53:07 · 488 阅读 · 0 评论 -
leetcode Reverse Nodes in k-Group
class Solution {public: ListNode* reverseKGroup(ListNode* head, int k) { int size = listSizeModified(head, k); if (size == 0) return head; ListNo原创 2016-08-03 22:43:35 · 190 阅读 · 0 评论 -
leetcode 44 Wildcard Matching
class Solution {// 必须掌握的一题public: bool isMatch(string s, string p) { int start_s = -1, // s的索引, start_p = -1,// p的索引,当p[start_p] =='*'时,s此时的索引为start_s i = 0,原创 2016-08-05 20:27:11 · 215 阅读 · 0 评论 -
Remove Duplicates from Sorted List II
class Solution {public: ListNode* deleteDuplicates(ListNode* head) { ListNode* headOfHead = new ListNode(0); //构建头结点 headOfHead -> next = head; ListNode* priorPtr = headOf原创 2016-08-03 12:25:47 · 257 阅读 · 0 评论 -
leetcode 69 sqrt(x)
class Solution {public: int mySqrt(int x){ long long low = 0, high = x;// 时刻警醒溢出!! while(low <= high){ long long mid =(low + high)/2; long long cmp = pow(m原创 2016-08-02 20:15:58 · 180 阅读 · 0 评论 -
leetcode Permutation Sequence
class Solution {public: string getPermutation(int n, int k) { preFunction(n); string ret; for (int i = n; i >= 1; --i) { int num = k / vec[i - 1]; if (num * vec[i - 1] == k) num--; /原创 2016-08-02 19:41:42 · 174 阅读 · 0 评论 -
[leetcode] 368. Largest Divisible Subset
class Solution {public: bool isPerfectSquare(int num) { long long low = 0, high = num; while ( low long long mid= (low + high) / 2; if原创 2016-07-30 13:27:33 · 232 阅读 · 0 评论 -
Two sum
题意: Given an array of integers, find two numbers such that they add up to a specific target number.The function twoSum should return indices of the two numbers such that they add up to the target, whe原创 2015-11-17 17:10:43 · 275 阅读 · 0 评论 -
Different Ways to Add Parentheses
Given a string of numbers and operators, return all possible results from computing all the different possible ways to group numbers and operators. The valid operators are +, - and *.// 后根遍历class Solu原创 2015-11-17 13:19:44 · 263 阅读 · 0 评论