class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
vector<int> ans;
vector<int> temp;
temp = nums;
int n = temp.size();
sort(temp.begin(), temp.end());
int i = 0, j = n - 1;
while(i < j){
if(temp[i] + temp[j] > target) j--;
else if(temp[i] + temp[j] < target) i++;
else break;
}
if(i < j){
for(int k = 0; k < n; k++){
if(i < n && nums[k] == temp[i]){
ans.push_back(k);
i = n;
}else if(j < n && nums[k] == temp[j]){
ans.push_back(k);
j = n;
}
if(i ==n && j == n) return ans;
}
}
return ans;
}
};
class Solution {
public:
int maxProfit(vector<int>& prices) {
int inf = 1e9;
int minprice = inf, maxprofit = 0;
for (int price: prices) {
maxprofit = max(maxprofit, price - minprice);
minprice = min(price, minprice);
}
return maxprofit;
}
};
class Solution {
public:
bool hasCycle(ListNode* head) {
if (head == nullptr || head->next == nullptr) {
return false;
}
ListNode* slow = head;
ListNode* fast = head->next;
while (slow != fast) {
if (fast == nullptr || fast->next == nullptr) {
return false;
}
slow = slow->next;
fast = fast->next->next;
}
return true;
}
};
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
bool isSubStructure(TreeNode* A, TreeNode* B) {
if(A == NULL || B == NULL) return false;
return helper(A, B) || isSubStructure(A->left, B) || isSubStructure(A->right, B);
}
bool helper(TreeNode* A, TreeNode* B){
if(A == NULL || B == NULL) return B == NULL ? true : false;
if(A->val != B-> val) return false;
return helper(A->left, B->left) && helper(A->right, B->right);
}
};
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
queue<TreeNode*> q;
q.push(root);
vector<vector<int>> res;
while(q.size()){
int size = q.size();
vector<int> level;
for(int i = 0; i < size; i++){
TreeNode* rt = q.front();
q.pop();
if(!rt) continue;
level.push_back(rt->val);
if(rt->left) q.push(rt->left);
if(rt->right) q.push(rt->right);
}
if(level.size() != 0) res.push_back(level);
}
return res;
}
};