Posts

Showing posts with the label easy

57. 3Sum

Code ( Language :C++) ( Judger :cloudjudge-cluster-7) Edit class Solution { public : /** * @param numbers: Give an array numbers of n integer * @return: Find all unique triplets in the array which gives the sum of zero. */ vector < vector < int >> threeSum( vector < int > &numbers) { // write your code here vector < vector < int >> res; const int size = numbers.size(); if (size < 3 ){ return res; } sort(numbers.begin(), numbers.end()); for ( int i = 0 ; i <= size - 3 ; i++){ if (i > 0 && numbers[i] == numbers[i - 1 ]){ continue ; } int target = 0 - numbers[i]; int left = i + 1 ; int right = size - 1 ; while (left < right){ if (left > i + 1 && numbers[left] == numbers[left - 1 ]){ ...

72. Construct Binary Tree from Inorder and Postorder Traversal

class Solution { public : /** * @param inorder: A list of integers that inorder traversal of a tree * @param postorder: A list of integers that postorder traversal of a tree * @return: Root of a tree */ unordered_map < int , int > mp; TreeNode * buildTree ( vector < int > &inorder, vector < int > &postorder) { // write your code here //这里是inorder和postorder,和inorder 和 preorder 类似吧。 // 左根右,左右根 const int sizeI = inorder.size(); const int sizeP = postorder.size(); if (sizeI == 0 ){ return NULL ; } if (sizeP != sizeI){ return NULL ; } for ( int i = 0 ; i < sizeI; i++){ mp[inorder[i]] = i; } return hepler(inorder, postorder, 0 , sizeI - 1 , 0 , sizeP - 1 ); } TreeNode * hepler ( vector < int > &inorder, vector < int > &postorder, int startI, int end...

442. Implement Trie (Prefix Tree)

class trieNode { public : trieNode *child[ 26 ]; bool isValid; trieNode(){ for ( int i = 0 ; i < 26 ; i++){ this ->child[i] = NULL ; } this ->isValid = false ; } }; class Trie { public : trieNode *root; Trie() { // do intialization if necessary root = new trieNode(); } /* * @param word: a word * @return: nothing */ void insert ( string &word) { // write your code here int len = word.size(); trieNode *root1 = root; for ( int i = 0 ; i < len; i++){ if (root1->child[word[i] - 'a' ] == NULL ){ root1->child[word[i] - 'a' ] = new trieNode(); } root1 = root1->child[word[i] - 'a' ]; } root1->isValid = true ; return ; } /* * @param word: A string * @return: if the word is in the trie. *...

450. Reverse Nodes in k-Group

class Solution { public : /** * @param head: a ListNode * @param k: An integer * @return: a ListNode */ ListNode * reverseKGroup (ListNode * head, int k) { // write your code here //1, find every K; 2, reverse K elements; 3, connect if (head == NULL || head->next == NULL || k == 1 ){ return head; } int cnt = 0 ; ListNode *dummy = new ListNode( 0 ); ListNode *copy = dummy; while (head != NULL ){ ListNode *start = head; while (head != NULL && cnt < k){ head = head->next; cnt++; } if (cnt == k){ ListNode* newStart = reverse(start, head); dummy->next = newStart; start->next = head; dummy = start; cnt = 0 ; } } return copy->next; } ...

53. Reverse Words in a String

class Solution { public : /* * @param s: A string * @return: A string */ string reverseWords ( string &s) { // write your code here std :: vector < string > strs; const int size = s.size(); if (size == 0 ){ return s; } int i = 0 ; while (i < size){ while (i < size && s[i] == ' ' ){ i++; } if (i == size){ break ; } int start = i; while (i < size && s[i] != ' ' ){ i++; } strs.push_back(s.substr(start, i - start)); } string res = "" ; if (strs.size() == 0 ){ return res; } for ( int i = strs.size() - 1 ; i >= 1 ; i--){ res += strs[i] + ' ' ; } res += strs[ 0 ]; return ...

31. Partition Array

Code ( Language :C++) ( Judger :ip-172-31-18-231) Edit class Solution { public : /** * @param nums: The integer array you should partition * @param k: An integer * @return: The index after partition */ int partitionArray ( vector < int > &nums, int k) { // write your code here const int size = nums.size(); if (size == 0 ){ return 0 ; } int left = 0 ; int right = size - 1 ; while (left < right){ while (left < right && nums[left] < k){ left++; } while (left < right && nums[right] >= k){ right--; } if (left < right){ int tmp = nums[left]; nums[left] = nums[right]; nums[right] = tmp; right--; left++; } } for ( int i = 0 ;...

FM 100. Remove Duplicates from Sorted Array

class Solution { public : /* * @param nums: An ineger array * @return: An integer */ int removeDuplicates ( vector < int > &nums) { // write your code here const int size = nums.size(); if (size == 0 ){ return 0 ; } int j = 1 ; for ( int i = 1 ; i < size; i++){ if (nums[i] != nums[i - 1 ]){ nums[j++] = nums[i]; } } return j; } };

138. Subarray Sum

Code ( Language :C++) ( Judger :ip-172-31-12-4) Edit class Solution { public : /** * @param nums: A list of integers * @return: A list of integers includes the index of the first number and the index of the last number */ vector < int > subarraySum( vector < int > &nums) { // write your code here unordered_map < int , int > mp; mp[ 0 ] = -1 ; int prefixSum = 0 ; for ( int i = 0 ; i < nums.size(); i++){ prefixSum += nums[i]; if (mp.count(prefixSum)){ return {mp[prefixSum] + 1 , i}; } mp[prefixSum] = i; } } };

242. Convert Binary Tree to Linked Lists by Depth

/** * Definition of TreeNode: * class TreeNode { * public: * int val; * TreeNode *left, *right; * TreeNode(int val) { * this->val = val; * this->left = this->right = NULL; * } * } * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public : /** * @param root the root of binary tree * @return a lists of linked list */ vector <ListNode*> binaryTreeToLists(TreeNode* root) { // Write your code here vector <ListNode *> res; if (root == NULL ){ return res; } std :: queue <TreeNode *> q; q.push(root); while (!q.empty()){ int sizeQ = q.size(); ListNode *dummy = new ListNode( 0 ); ListNode *copy = dummy; for ( int i = 0 ; i < sizeQ; i++){ T...