不用加减号求两数的和
int getSum(int a, int b) {
if (b == 0)
return a;
return getSum(a^b, (a &b) << 1);
}
二叉树插入
TreeNode* Insert(int val, TreeNode *root) {
if (!root)
root = new TreeNode(val);
else if (val < root->val)
root->left = Insert(val, root->left);
else if (val>root->val)
root->right = Insert(val, root->right);
return root;
}
Top K(priority_queue)
vector<int> GetLeastNumbers_Solution(vector<int> input, int k) {
int size = input.size();
vector<int> ret;
if (size == 0 || k <= 0 || k > size)
return ret;
priority_queue<int> q;
for (int i = 0; i < size; i++) {
if (q.size() < k)
q.push(input[i]);
else {
if (input[i] < q.top()) {
q.pop();
q.push(input[i]);
}
}
}
while (!q.empty()) {
ret.push_back(q.top());
q.pop();
}
reverse(ret.begin(), ret.end());
return ret;
}
二叉树两个节点间的最大距离
int Height(TreeNode *root, int &MaxDistance) {
if (root == NULL)
return -1;
int heightLeft = Height(root->left, MaxDistance) + 1;
int heightRight = Height(root->right, MaxDistance) + 1;
int Distance = heightLeft + heightRight;
MaxDistance = MaxDistance > Distance ? MaxDistance : Distance;
return hightLeft > heightRight ? heightLeft : heightRight;
}
求数组中右边第一个比它大的数
/*
给定一个数组,找出这个数组中每一个数右边的第一个比它大的数,
比如9 6 5 7 3 2 1 5 9 10,返回的是 10 7 7 9 5 5 5 9 10 N。
*/
vector<int> findMax(vector<int> nums) {
int len = nums.size();
vector<int> res(len, INT_MAX);
stack<int> stk;
for (int i = 0; i < len; i++) {
while (!stk.empty() && nums[stk.top()] < nums[i]) {
res[stk.top()] = nums[i];
stk.pop();
}
stk.push(i);
}
return res;
}
GitHub-Leetcode:https://github.com/wenwu313/LeetCode