29. Divide Two Integers/49. Group Anagrams/96. Unique Binary Search Trees/560. Subarray Sum Equals K
来源:互联网 发布:com顶级域名注册局 编辑:程序博客网 时间:2024/04/29 19:04
- Divide Two Integers
- Problem Description
- Implementation
- Group Anagrams
- Problem Description
- Implementation
- Unique Binary Search Trees
- Problem Description
- Implementation
- Subarray Sum Equals K
- problem description
- implementation
29. Divide Two Integers
Problem Description
Divide two integers without using multiplication, division and mod operator.If it is overflow, return MAX_INT.
Implementation
class Solution {public: int divide(int dividend, int divisor) { if(!divisor || (dividend == INT_MIN && divisor == -1)) { return INT_MAX; } int sign = (dividend & (1 << 31)) ^ (divisor & (1 << 31)); long long ddend = labs(dividend); long long dvisor = labs(divisor); int res = 0; while(ddend >= dvisor) { int sft = 0; long long int sft_num = dvisor; while(ddend >= sft_num) { sft_num <<= 1; sft++; } res += 1 << (sft-1); ddend -= dvisor << (sft - 1); } return sign?(-1*res):res; }};
49. Group Anagrams
Problem Description
Given an array of strings, group anagrams together.For example, given: ["eat", "tea", "tan", "ate", "nat", "bat"], Return:[ ["ate", "eat","tea"], ["nat","tan"], ["bat"]]Note: All inputs will be in lower-case.
Implementation
If you utilize unordered_map, we can get quick speed. As we are not concerned about searching operations, we need insert more frequently.
class Solution {public: vector<vector<string>> groupAnagrams(vector<string> strs) { map<string, vector<string>> mmp; int size; if( (size = strs.size()) == 0) { vector<vector<string>> zero_res; return zero_res; } for(int idx = 0; idx < size; idx++) { string tmp = strs[idx]; sort(strs[idx].begin(), strs[idx].end()); if(mmp[strs[idx]].size() > 0) { mmp[strs[idx]].push_back(tmp); } else { vector<string> tmp_new; tmp_new.push_back(tmp); mmp[strs[idx]] = tmp_new; } } vector<vector<string>> res; for(map<string, vector<string>>::iterator it = mmp.begin(); it != mmp.end(); it++) { res.push_back(it->second); } return res; }};
96. Unique Binary Search Trees
Problem Description
Given n, how many structurally unique BST's (binary search trees) that store values 1...n?For example,Given n = 3, there are a total of 5 unique BST's. 1 3 3 2 1 \ / / / \ \ 3 2 1 1 3 2 / / \ \ 2 1 2 3
Implementation
Dynamic Program:
class Solution {public: int numTrees(int n) { vector<int> res(n+1, 0); res[0] = res[1] = 1; for(int idx0 = 2; idx0 <= n; idx0++) { for(int idx1 = 1; idx1 <= idx0; idx1++) { res[idx0] += res[idx1 - 1]*res[idx0 - idx1]; } } return res[n]; }};
mathematics way:
class Solution {public: int numTrees(int n) { // C(2n, n)/(n+1) long long int res = 1; for(int num = n + 1; num <= (n << 1); num++) { res = res*num/(num-n); } return res/(n+1); }};
560. Subarray Sum Equals K
problem description
Given an array of integers and an integer k, you need to find the total number of continuous subarrays whose sum equals to k.Example 1:Input:nums = [1,1,1], k = 2Output: 2Note:The length of the array is in range [1, 20,000].The range of numbers in the array is [-1000, 1000] and the range of the integer k is [-1e7, 1e7].
implementation
solution 1: accumulated sum
class Solution {public: int subarraySum(vector<int>& nums, int k) { int res = 0; int size = nums.size(); if(!size) { return res; } for(int idx = 1; idx < size; idx++) { nums[idx] += nums[idx-1]; } for(int idx = 0; idx < size; idx++) { if(nums[idx] == k) { res++; } } for(int idx0 = 0; idx0 < size - 1; idx0++) { for(int idx1 = idx0 + 1; idx1 < size; idx1++) { if(nums[idx1] - nums[idx0] == k) { res++; } } } return res; }};
solution 2:
with map.
class Solution {public: int subarraySum(vector<int>& nums, int k) { map<int, int> rec; int res = 0; int cum = 0; int size = nums.size(); if(!size) { return res; } rec[0]++; for(int idx = 0; idx < size; idx++) { cum += nums[idx]; res += rec[cum - k]; rec[cum]++; } return res; }};
阅读全文
0 0
- 29. Divide Two Integers/49. Group Anagrams/96. Unique Binary Search Trees/560. Subarray Sum Equals K
- Binary Search:29. Divide Two Integers
- LeetCode *** 29. Divide Two Integers(binary search)
- leetcode :Binary Search: Divide Two Integers(029)
- leetcode 560. Subarray Sum Equals K & leetcode 1. Two Sum
- 96.Unique Binary Search Trees
- 96. Unique Binary Search Trees
- 96. Unique Binary Search Trees
- 96. Unique Binary Search Trees
- 96. Unique Binary Search Trees
- 96. Unique Binary Search Trees
- 96. Unique Binary Search Trees
- 96. Unique Binary Search Trees
- 96. Unique Binary Search Trees
- 96. Unique Binary Search Trees
- 96. Unique Binary Search Trees
- 96. Unique Binary Search Trees
- 96. Unique Binary Search Trees
- CSS3盒模型的有关属性
- hdu 3853(期望dp)
- B
- 对傅里叶变换的理解
- Whooshalchemyplus 加 jieba 实现flask支持中文全文搜索
- 29. Divide Two Integers/49. Group Anagrams/96. Unique Binary Search Trees/560. Subarray Sum Equals K
- HDU5785Hints of sd0061
- Shell字符串比较相等、不相等方法小结
- Linux /etc/passwd文件
- iOS开发- 支付宝2017.7.28为止最新SDK引入后直接报错和AL138173
- 云掌财经对话新三板专题论坛7月30隆重举办
- [PAT乙级]1066. 图像过滤(15)
- 优秀的jquery插件
- POJ2096 Collecting Bugs 解题报告【概率DP】