11. 盛最多水的容器 解题思路:这里是求盛最多的水,和木桶理论有点相似,盛水量由高度最低的决定,另外要求盛水量最大,宽度也必须是最长的,可以用两个指针指向坐标的两端,,然后低的一端取寻找高的一端 ,寻找体积最大。 代码: class Solution { public: int maxArea(vector<int>& height) { int res = 0; int i = 0, j = height.size() - 1; while (i < j) { //这里取高度最小的 res = max(res, min(height[i], height[j]) * (j - i)); if (height[i] > height[j])j--; else i++; } return res; } }; 12. 整数转罗马数字 解题思路:寻找数字和罗马数字的对应关系,这里4,5,9的数字都是没有规律的,数字中含有几个1000就有几个M,含有几个500就有几个D,以此类推。 代码 class Solution { public: string intToRoman(int num) { int values[] = { 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 }; string reps[] = { "M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I", }; string res; for (int i = 0; i < 13; i++) { while (num >= values[i]) { num -= values[i]; res += reps[i]; } } return res; } };