盛水最多的容器
題目描述
給定 n 個非負整數 a1,a2,…,an,每個數代表坐標中的一個點 (i, ai) 。在坐標內畫 n 條垂直線,垂直線 i 的兩個端點分別為 (i, ai) 和 (i, 0)。找出其中的兩條線,使得它們與 x 軸共同構成的容器可以容納最多的水。
解題思路
本題的意思是,下標之差與數組所對應的下標的值之和最大
所以,一個從前,一個從后,選擇兩個下標所對應的值最小的,乘以下標之差,然后依次類推,每回都比較之前算的面積和現在算的面積哪個大
代碼實現
class Solution {
public:int maxArea(vector<int>& height) {int length = height.size();int left = 0;int right = length-1;int temp = 0;int res = 0; //保存結果while(left<right){//兩條邊中最短的temp = min(height[left],height[right]);res = max(res,(right-left)*temp);//如果最短的邊是左邊,則left++,否則right++if(temp == height[left]){left++;}else{right--;}}return res;}
};
整數轉羅馬數字
題目描述
解題思路
一個一個找表,數字每找到一個就減去相應的數,對應羅馬數字就往結果后加
找到羅馬數字與數字之間的對應關系表
代碼實現
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;}
};