每日一题
1465. 切割后面积最大的蛋糕
要最后取mod,中间取mod的话比较会出错
#include <string>
#include<iostream>
#include<unordered_map>
#include <algorithm>
#include <sstream>
#include <vector>
using std::vector;
class Solution1029 {
public:
int maxArea(int h, int w, vector<int>& horizontalCuts, vector<int>& verticalCuts) {
const int mod = 1e9 + 7;
sort(horizontalCuts.begin(), horizontalCuts.end());
sort(verticalCuts.begin(), verticalCuts.end());
horizontalCuts.insert(horizontalCuts.begin(), 0);
verticalCuts.insert(verticalCuts.begin(), 0);
horizontalCuts.push_back(h);
verticalCuts.push_back(w);
long long maxH = 0, maxW = 0, res = 0;
for (int i = 1; i < horizontalCuts.size(); i++) {
long long length1 = horizontalCuts[i] - horizontalCuts[i-1];
for (int j = 1; j < verticalCuts.size(); j++) {
long long length2 = verticalCuts[j] - verticalCuts[j-1];
long long cur_res = length1 * length2;
if (cur_res > res) {
res = cur_res;
}
}
}
return res % mod;
}
};
int main() {
int h = 1000000000;
int w = 1000000000;
std::vector<int> horizontalCuts = {2};
std::vector<int> verticalCuts = {2};
Solution1029 solution;
int result = solution.maxArea(h, w, horizontalCuts, verticalCuts);
std::cout << "Max Area: " << result << std::endl;
return 0;
}
[2342] 数位和相等数对的最大和
#include <vector>
#include <iostream>
#include <unordered_map>
#include <string>
class Solution {
public:
int maximumSum(std::vector<int>& nums) {
//建立一个哈希数组,存储数位和,遍历
// 创建一个哈希表,键是字符串,值是整数
std::unordered_map<int, int> myMap;
int ans = -1;
for (int i = 0; i < size(nums); ++i) {
// 计算数位,从前往后遍历
int cur = 0;
int x = nums[i];
while (x > 0)
{
cur += x % 10;
x = x / 10;
}
// 判断是不是在 map 里
if (myMap.find(cur) != myMap.end()) {
ans = std::max(ans, nums[i] + myMap[cur]);
myMap[cur] = std::max(nums[i], myMap[cur]); // 添加缺失的分号
} else {
myMap[cur] = nums[i];
}
}
return ans;
}
};
递归
面试题 08.06. 汉诺塔问题
在这段代码中,void 是一个 C++ 中的关键字,用于指定函数不返回任何值。在 hanota 函数的声明中,void 表示该函数不返回任何内容。 & 符号在这里用作引用运算符,用于传递参数。在 C++ 中,使用引用可以让函数修改传递给它的变量的值,而不是创建它们的副本。在这里,函数的参数 A、B 和 C 都是向量(vector<int> 类型),而使用 & 让函数能够直接修改这些向量,而不是对它们进行复制。
class Solution {
public:
void hanota(vector<int>& A, vector<int>& B, vector<int>& C) {
int n = A.size();
move(n, A, B, C);
}
void move(int n, vector<int>& A, vector<int>& B, vector<int>& C) {
if (n == 1){
C.push_back(A.back());
A.pop_back();
return;
move(n-1, A, C, B); // 将A上面n-1个通过C移到B
C.push_back(A.back()); // 将A最后一个移到C
A.pop_back(); // 这时,A空了
move(n-1, B, A, C) // 将B上面n-1个通过空的A移到C
}
}
};