11.盛最多水的容器
给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。
找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
返回容器可以储存的最大水量。
说明:你不能倾斜容器。
class Solution { public: int maxArea(vector<int>& height) { int n=0; int m=height.size()-1; int ans=0; while(n<m) { int area=min(height[n],height[m])*(m-n); ans=max(ans,area); if(height[n]<=height[m]) ++n; else --m; } return ans; } };
思路:双指针遍历求最大面积。
1323。6和9组成的最大数字
给你一个仅由数字 6 和 9 组成的正整数 num。
你最多只能翻转一位数字,将 6 变成 9,或者把 9 变成 6 。
请返回你可以得到的最大数字。
class Solution { public: int maximum69Number (int num) { int a[10],q=0; while(num) { a[q]=num%10; num/=10; q++; } int ans=0; for(int i=q-1;i>=0;i--) { if(a[i]==6) { a[i]=9; break; } } for(int i=q-1;i>=0;i--) { ans=ans*10+a[i]; } return ans; } };
思路:将第一个六换成九然后输出。
1217.玩筹码
有 n 个筹码。第 i 个筹码的位置是 position[i] 。
我们需要把所有筹码移到同一个位置。在一步中,我们可以将第 i 个筹码的位置从 position[i] 改变为:
position[i] + 2 或 position[i] - 2 ,此时 cost = 0
position[i] + 1 或 position[i] - 1 ,此时 cost = 1
返回将所有筹码移动到同一位置上所需要的 最小代价
class Solution { public: int minCostToMoveChips(vector<int>& position) { int a=0,b=0; for(int data:position) { if(data%2==1) a++; else b++; } return min(a,b); } };
思路:奇数偶数随意跃迁,所以返回数小的即可。
1736.替换隐藏数字得到的最晚时间
给你一个字符串 time ,格式为 hh:mm(小时:分钟),其中某几位数字被隐藏(用 ? 表示)。
有效的时间为 00:00 到 23:59 之间的所有时间,包括 00:00 和 23:59 。
替换 time 中隐藏的数字,返回你可以得到的最晚有效时间。
class Solution { public: string maximumTime(string time) { if(time[0]=='?') { if(time[1]=='0'||time[1]=='1'||time[1]=='2'||time[1]=='3'||time[1]=='?') time[0]='2'; else time[0]='1'; } if(time[1]=='?'){ if(time[0]=='0'||time[0]=='1') time[1]='9'; else time[1]='3'; } if(time[3]=='?')time[3]='5'; if(time[4]=='?')time[4]='9'; return time; } };
思路:
直接将未赋值的时间按照最大赋值。