【每日刷题】Day102

【每日刷题】Day102

🥕个人主页:开敲🍉

🔥所属专栏:每日刷题🍍

🌼文章目录🌼

[1. 11. 盛最多水的容器 - 力扣(LeetCode)](#1. 11. 盛最多水的容器 - 力扣(LeetCode))

[2. 611. 有效三角形的个数 - 力扣(LeetCode)](#2. 611. 有效三角形的个数 - 力扣(LeetCode))

[3. 和为S的两个数字_牛客题霸_牛客网 (nowcoder.com)](#3. 和为S的两个数字_牛客题霸_牛客网 (nowcoder.com))

1. 11. 盛最多水的容器 - 力扣(LeetCode)

//思路:双指针。

//定义两个指针,left和right,分别指向数组开头元素和最后一个元素。

//计算两指针形成容器的容积,并记录最大值。

//如果left指向的值小于right,则left++向后遍历;如果right指向的值小于left,则right--向前遍历。

//返回记录的最大容积

class Solution {

public:

int maxArea(vector<int>& height)

{

int left = 0,right = height.size()-1,max = 0;

while(left<right)

{

int high = height[left]>height[right]?height[right]:height[left];

int length = right-left;

int volume = high*length;

max = max>volume?max:volume;

if(height[left]<height[right])

left++;

else

right--;

}

return max;

}

};

2. 611. 有效三角形的个数 - 力扣(LeetCode)

//思路:双指针+排序。

//本题如果采用暴力解法,三层循环遍历所有可能的三元组,时间复杂度就太大了,必然会超出时间限制。

//而我们的思路则是在暴力遍历的想法上面进行优化,具体思路看图:

class Solution {

public:

int triangleNumber(vector<int>& nums)

{

int ans = 0;

int max = nums.size()-1;

sort(nums.begin(),nums.end());

//max>=2是因为最少要组成一个三元组

while(max>=2)

{

//寻找能与max组成三角形的二元组

int left = 0;

int right = max-1;

//当left==right,当前max的循环结束

while(left<right)

{

//如果当前left+right都>max,则之间的所有二元组也一定>max

if(nums[left]+nums[right]>nums[max])

{

ans+=(right-left);

right--;

}

//如果left+right<=max,那么left向后遍历

else

left++;

}

max--;

}

return ans;

}

};

3. 和为S的两个数字_牛客题霸_牛客网 (nowcoder.com)

//思路:双指针。

//定义两个指针,left和right,分别指向头尾元素,判断它们的和与sum的关系:

//注:下述操作可行是因为所给的为有序数组

//① 如果val_left + val_right == sum 则返回结果

//② 如果 val_left + val_right > sum 则right--,使val_right减小

//③ 如果 val_left + val_right > sum 则left++,使val_left增大

class Solution {

public:

vector<int> FindNumbersWithSum(vector<int> array,int sum)

{

vector<int> ans;

int left = 0;

int right = array.size()-1;

while(left<right)

{

int val_left = array[left];

int val_right =array[right];

//找到结果,返回结果

if(val_left+val_right==sum)

{

ans.push_back(val_left);

ans.push_back(val_right);

break;

}

//使val_right减小

else if(val_left+val_right>sum)

right--;

//使val_left增大

else

left++;

}

return ans;

}

};

相关推荐
想逃离铁厂的老铁5 小时前
Day43 >> 300.最长递增子序列 + 674. 最长连续递增序列+ 718. 最长重复子数组
数据结构·算法
Yzzz-F5 小时前
P6648 [CCC 2019] Triangle: The Data Structure [st表]
算法
FL16238631295 小时前
[C++][cmake]基于C++在windows上onnxruntime+opencv部署yolo26-seg的实例分割onnx模型
c++·windows·opencv
LateFrames5 小时前
泰勒级数:从 “单点” 到 “理论与实践的鸿沟”
学习·算法
m0_726365835 小时前
哈希分分预测系统 + Python Worker + Web 仪表盘”小系统(PHP + MySQL)
前端·python·哈希算法
武帝为此5 小时前
【RC4加密算法介绍】
网络·python·算法
宵时待雨5 小时前
数据结构(初阶)笔记归纳4:单链表的实现
c语言·开发语言·数据结构·笔记·算法
wm10435 小时前
代码随想录第三天 链表
数据结构·链表
BLSxiaopanlaile5 小时前
关于子集和问题的几种解法
数据结构·算法·剪枝·回溯·分解
狐576 小时前
2026-01-17-LeetCode刷题笔记-3047-求交集区域内的最大正方形面积
笔记·算法·leetcode