1、数组拆分1
给定长度为 2n 的数组, 你的任务是将这些数分成 n 对, 例如 (a1, b1), (a2, b2), ..., (an, bn) ,使得从1 到 n 的 min(ai, bi) 总和最大。
示例 1:
输入: [1,4,3,2]
输出: 4
解释: n 等于 2, 最大总和为 4 = min(1, 2) + min(3, 4).
int arrayPairSum(vector<int>& nums) {
sort(nums.begin(),nums.end());
int sum=nums[0];
for(int i=1;i<nums.size();i++){
if(i%2==0){
sum+=nums[i];
}
}
return sum;
}
2、二叉树的坡度
给定一个二叉树,计算整个树的坡度。
一个树的节点的坡度定义即为,该节点左子树的结点之和和右子树结点之和的差的绝对值。空结点的的坡度是0。
整个树的坡度就是其所有节点的坡度之和。
int getValue(TreeNode* root){
if(root==nullptr) return 0;
return getValue(root->left)+getValue(root->right)+root->val;
}
int findTilt(TreeNode* root) {
if(root==nullptr)return 0;
int minus = abs(getValue(root->left)-getValue(root->right));
return minus+findTilt(root->left)+findTilt(root->right);
}
3、N叉树的前序遍历
给定一个 N 叉树,返回其节点值的前序遍历。
例如,给定一个 3叉树
:
返回其前序遍历: [1,3,5,6,2,4]
。
def preorder(self, root: 'Node') -> List[int]:
res = []
def helper(root):
if not root:
return
res.append(root.val)
for child in root.children:
helper(child)
helper(root)
return res
4、N叉树的后序遍历
给定一个 N 叉树,返回其节点值的后序遍历。
例如,给定一个 3叉树
:
返回其后序遍历: [5,6,3,2,4,1]
.
vector<int> postorder(Node* root) {
vector<int> result;
postorder(root,result);
return result;
}
void postorder(Node* root,vector<int>& result){
if(root==nullptr){
return;
}for
(auto node:root->children){
postorder(node,result);
}
result.push_back(root->val);
}