题目11
思路:设置左右指针 left和 right 指针指向数组的开始和末尾,max_water 用于记录最大容量初始为0。利用while循环left<right,移动指针比较数组元素 height[left] 和 height[right] 的大小,移动较短的那条线的指针,当 left 和 right 指针相遇时,循环结束,返回 max_water。
代码
#include<vector>
#include <algorithm>
class Solution {
public:int maxArea(vector<int>& height) {int left=0;//左指针int right=height.size()-1;int max_Water=0;//最大容量while(left<right){int currt_Water=min(height[left],height[right])*(right-left);max_Water=max(max_Water,currt_Water);if(height[left]<height[right]){left++;}else{right--;}}return max_Water;}
};
题目12
这个题有点坑,最后算法给出的数组是这样的
vector<pair<int,string>> valueSymbols = {{1000, "M"},{900, "CM"},{500, "D"},{400, "CD"},{100, "C"},{90, "XC"},{50, "L"},{40, "XL"},{10, "X"},{9, "IX"},{5, "V"},{4, "IV"},{1, "I"}};
代码
#include <string>
#include <vector>
#include <utility>class Solution {
public:string intToRoman(int num) {// 罗马数字符号及其对应的值,按从大到小排序vector<pair<int,string>> valueSymbols = {{1000, "M"},{900, "CM"},{500, "D"},{400, "CD"},{100, "C"},{90, "XC"},{50, "L"},{40, "XL"},{10, "X"},{9, "IX"},{5, "V"},{4, "IV"},{1, "I"}};string result;for (const auto& [value, symbol] : valueSymbols) {// 尽可能多地减去当前值,并将符号附加到结果中while (num >= value) {result += symbol;num -= value;}if (num == 0) break; }return result;}
};