T11.盛最多水的容器
双指针:
- 初始化:i, j在水槽左右两端
- 循环收窄:直至双指针相遇时跳出 ( i < j )
- 更新面积最大值
- 选定两板高度中的短板,向中间收窄一格
class Solution { public: int maxArea(vector<int>& height) { int res = 0; for(int i = 0, j = height.size() - 1; i < j;){ res = max(res, min(height[i], height[j]) * (j - i)); //更新答案 if(height[i] > height[j]) j --; //判断移动双指针 else i ++; } return res; } };
T2.整数转罗马数字
找规律(单独处理十进制的每一位数)可以整理到如下表格:
const string thousands[] = {"", "M", "MM", "MMM"}; const string hundreds[] = {"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"}; const string tens[] = {"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"}; const string ones[] = {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"}; class Solution { public: string intToRoman(int num) { return thousands[num / 1000] + hundreds[num % 1000 / 100] + tens[num % 100 / 10] + ones[num % 10]; } };
T14.