427 字
2 分钟
Day20260311

Day20260311#

轮转数组#

给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 要求空间复杂度为O(1)

题解#

i到i+k 然后 记录 i+k 的值,然后继续找i+k对应的位置。但是这样会形成一个环,环的大小为len/gcd(len,k)。然后完成一个环的位移后,加一,完成下一个环的位移。

class Solution {
public:
int gcd(int l,int r){
if(r%l == 0){
return l;
}
return gcd(r%l,l);
}
void rotate(vector<int>& nums, int k) {
if(k==0) return;
int len = nums.size();
int g = gcd(min(len,k),max(len,k));
int count = len;
int p = 0;
int tmp;
while(count > 0){
tmp = nums[p];
for(int i=0;i<len/g;i++){
int target = (p+k) % len;
swap(nums[target],tmp);
p = target;
count--;
}
p = (p+1) %len;
}
}
};

二叉树中的最大路径和#

二叉树中的 路径 被定义为一条节点序列,序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。

路径和 是路径中各节点值的总和。

给你一个二叉树的根节点 root ,返回其 最大路径和

题解#

递归,考虑左右两边的最大贡献值,然后维护一个全局变量,计算 val = left + right + node->val

/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
int ans = -1e9;
int findMax(TreeNode* node){
if(node == nullptr) return -1e9;
vector<int> tmp;
int leftVal = findMax(node->left);
int rightVal = findMax(node->right);
tmp.push_back(leftVal);
tmp.push_back(rightVal);
tmp.push_back(rightVal+node->val);
tmp.push_back(leftVal+node->val);
tmp.push_back(node->val);
tmp.push_back(leftVal+rightVal+node->val);
sort(tmp.begin(),tmp.end());
ans = max(ans,tmp[5]);
return max(max(rightVal,leftVal),0)+node->val;
}
int maxPathSum(TreeNode* root) {
findMax(root);
return ans;
}
};
Day20260311
https://blog.eachic.me/posts/hot100/day20260311/
作者
Eachic
发布于
2026-03-11
许可协议
CC BY-NC-SA 4.0