数据结构
文章平均质量分 61
shiyang6017
这个作者很懒,什么都没留下…
展开
-
leetcode 84. Largest Rectangle in Histogram
class Solution { public: int largestRectangleArea(vector& heights) { heights.insert(heights.begin(), 0); // 哨兵 int ret = 0 ; stack sta; sta.push(0); for (in原创 2016-09-13 12:05:48 · 163 阅读 · 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 432. All O`one Data Structure
class AllOne { private: /* * 1、将Value相同的string放置到链表:strings * 2、记录该value的值:val */ struct ListOfString{ ListOfString(int v, string str):val(v){ strings.push_fro原创 2016-10-19 12:20:55 · 729 阅读 · 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'组成的数字 template class 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'组成的数字 template class BinaryIndexedTree { public: BinaryIndexedTree(const vector& arr) :LEN(arr.size()) { ori = arr; ori.insert(ori.begin(), INT_MA原创 2016-09-29 16:33:57 · 997 阅读 · 0 评论 -
leetcode 212. Word Search II
trie + backtracking class 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 · 335 阅读 · 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 评论 -
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 · 206 阅读 · 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 · 240 阅读 · 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 · 248 阅读 · 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 · 218 阅读 · 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 Partition List
class Solution { public: ListNode* partition(ListNode* head, int x) { ListNode* smallHead = new ListNode(0);// 增加头结点,简化代码 ListNode* notSmallHead = new ListNode(0); ListNode原创 2016-08-05 23:21:08 · 168 阅读 · 0 评论 -
leetcode 92. Reverse Linked List II
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { //半逆置 public: Li原创 2016-08-06 18:49:20 · 239 阅读 · 0 评论 -
189. Rotate Array 数组右移K位
#pragma warning(disable:4996) #include using namespace std; void _reverse(int* , const int , const int); int main() { //方法一 //freopen("rsk.txt", "r", stdin); int n, k; while (cin >> n >> k) { in原创 2016-08-17 20:55:20 · 265 阅读 · 0 评论 -
160. Intersection of Two Linked Lists
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) { //好方法 ListNode *ptr1 = headA, *ptr2 = headB; while(ptr1 != ptr2){ ptr1 = ptr1?ptr1->next:headB; ptr2 = ptr2?pt原创 2016-09-02 20:08:16 · 186 阅读 · 0 评论 -
239. Sliding Window Maximum
class Solution { public: vector maxSlidingWindow(vector& nums, int k) { deque deq; vector ret; for (int i = 0; i < nums.size(); ++i){ if (!deq.empty() && i - de原创 2016-09-08 14:57:10 · 146 阅读 · 0 评论 -
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 评论