网站建设保定,电影下载网站如何做,做外贸纱线用什么网站,网上推广购物平台怎么推广好#xff08;11#xff09;盛最多水的容器#xff08;中等#xff09;
实现思路#xff1a; 定义两个指针#xff08;a,b#xff09;#xff0c;分别指向数组的前后位置#xff0c;如果此时a的值小于b的话#xff0c;就将a右移一位#xff0c;如果此时b指向的值小于…11盛最多水的容器中等
实现思路 定义两个指针a,b分别指向数组的前后位置如果此时a的值小于b的话就将a右移一位如果此时b指向的值小于a的话就将b向左边移动一位。
具体实现代码如下
class Solution {
public:int maxArea(vectorint height) {int res0;for(int i0,jheight.size()-1;ij;){resmax(res,min(height[i],height[j])*(j-i));if(height[i]height[j]) i;else j--;}return res;}};
(12)整数转化罗马数字中等
实现思路 此题就是一个模拟实现我们将对应的每一种特殊情况拿出来进行对比参照将数字以此减少并加上对应的罗马数字即可解决本题
具体代码如下
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 i0;i12;i){while(numvalues[i]){num-values[i];resreps[i];}}return res;}
};
13罗马数字转整数简单
实现思路 与上题类似具体看代码即可
代码实现如下
class Solution {
public:int romanToInt(string s) {unordered_mapchar,int count;count[I]1,count[V]5;count[X]10,count[L]50;count[C]100,count[D]500;count[M]1000;int res0;for(int i0;is.size();i){if(i1s.size() count[s[i]]count[s[i1]]){res-count[s[i]];}else{rescount[s[i]];}}return res;}
};
14最长公共前缀简单
实现思路 本题实现比较简单具体看代码即可。
代码实现如下
class Solution {
public:string longestCommonPrefix(vectorstring strs) {string res;if(strs.empty()) return res;for(int i0;;i){if(istrs[0].size()) return res;//对应的就是最后的结束条件char cstrs[0][i];for(auto str:strs){if(str.size()i || str[i]!c){return res;}}resc;}return res;}
};
15三数之和中等
实现思路 主要的思路就是利用双指针算法首先我们先排序因为有序是双指针算法的必要条件之后我们定义三个指针确定其中一个i然后让j与k进行遍历查找三者和为0的组合如果此时ijk各自前后互相相同的话直接跳过即可。
具体实现代码如下
class Solution {
public:vectorvectorint threeSum(vectorint nums) {sort(nums.begin(),nums.end());vectorvectorint res;for(int i0;inums.size();i){if(i nums[i]nums[i-1])continue;//continue函数的意思就是下面的带啊吗不进行但是整体的循环并未停止相当于循环了一次但是不做任何事for(int ji1,knums.size()-1;jk;j){if(ji1 nums[j]nums[j-1]) continue;while(jk-1 nums[i]nums[j]nums[k-1]0) k--;if(nums[i]nums[j]nums[k]0){res.push_back({nums[i],nums[j],nums[k]});}}}return res;}
};
希望以上文章对您有帮助