当前位置:网站首页>406-双指针(27. 移除元素、977.有序数组的平方、15. 三数之和、18. 四数之和)
406-双指针(27. 移除元素、977.有序数组的平方、15. 三数之和、18. 四数之和)
2022-06-23 06:16:00 【liufeng2023】
27. 移除元素

class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int i = 0;
int j = 0;
for(; i < nums.size(); i++)
{
if(nums[i] == val)
{
continue;
}
nums[j++] = nums[i];
}
return j;
}
};

977.有序数组的平方

class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
vector<int> v(nums.size(), 0);
for(int i = 0; i < nums.size(); i++)
{
v[i] = nums[i]*nums[i];
}
sort(v.begin(), v.end());
return v;
}
};

15. 三数之和

class Solution {
public:
vector<vector<int>> threeSum(vector<int>& nums) {
vector<vector<int>> result;
sort(nums.begin(), nums.end());
for (int i = 0; i < nums.size(); i++)
{
if (nums[i] > 0)
{
return result;
}
if (i > 0 && nums[i] == nums[i - 1])
{
continue;
}
int left = i + 1;
int right = nums.size() - 1;
while (right > left)
{
if (nums[i] + nums[left] + nums[right] > 0)
{
right--;
while (right > left && nums[right] == nums[right + 1]) right--;
}
else if (nums[i] + nums[left] + nums[right] < 0)
{
left++;
while (right > left && nums[left] == nums[left - 1]) left++;
}
else
{
result.push_back(vector<int>{
nums[i], nums[left], nums[right]});
//去重,在i不变的情况下,只有right--和left++才有可能得到下一个和为0的数组,nums是递增的!
while (left < right && nums[right] == nums[right-1]) right--;
while (left < right && nums[left] == nums[left+1]) left++;
right--;
left++;
}
}
}
return result;
}
};

18. 四数之和

class Solution {
public:
vector<vector<int>> fourSum(vector<int>& nums, int target) {
vector<vector<int>> result;
sort(nums.begin(), nums.end());
//nums[k]
for (int k = 0; k < nums.size(); k++)
{
//减枝处理
if (nums[k] > target && (nums[k] >= 0 || target >= 0))
{
break;
}
//去重
if (k > 0 && nums[k] == nums[k - 1])
{
continue;
}
//nums[i]
for (int i = k + 1; i < nums.size(); i++)
{
//二级减枝处理
if (nums[k] + nums[i] > target && (nums[k] + nums[i] >= 0 || target >= 0))
{
break;
}
//正确去重方法
if (i > k + 1 && nums[i] == nums[i - 1])
{
continue;
}
int left = i + 1;
int right = nums.size() - 1;
while (right > left)
{
if (nums[k] + nums[i] > target - (nums[left] + nums[right]))
{
right--;
while (right > left && nums[right] == nums[right + 1]) right--;
}
else if (nums[k] + nums[i] < target - (nums[left] + nums[right]))
{
left++;
while (right > left && nums[left] == nums[left - 1]) left++;
}
else
{
result.push_back(vector<int>{
nums[k], nums[i], nums[left], nums[right]});
while (right > left && nums[left] == nums[left + 1]) left++;
while (right > left && nums[right] == nums[right - 1]) right--;
right--;
left++;
}
}
}
}
return result;
}
};

边栏推荐
- Side effects of threads in embedded real-time systems
- 309. 最佳买卖股票时机含冷冻期
- 2121. sum of intervals of the same elements - hash table method
- MySQL重做日志 redo log
- 【项目实训】线形组件的细节
- 303. 区域和检索 - 数组不可变
- Wechat applet - Global Monitoring of certain attribute changes of GlobalData, such as monitoring of network state switching
- 【毕业季·进击的技术er】自己的选择,跪着也要走
- 在金融行业做数据产品经理是什么体验
- MySQL optimization
猜你喜欢

【项目实训】多段线扩充为平行线

Linux Installation mysql8.0.25

Business logic design of physical warehouse and virtual warehouse in middle inventory

Linux安装mysql8.0.25

ssm + ftp +ueditor

swagger3整合oauth2 认证token

RFID数据安全性实验:C#可视化实现奇偶校验、CRC冗余校验、海明码校验

Copy and paste of idea without escape

云原生落地进入深水区,博云容器云产品族释放四大价值
![[STL] summary of map usage of associated containers](/img/1d/1b6488ea47face0548500b1e1ec60d.png)
[STL] summary of map usage of associated containers
随机推荐
[STL] summary of stack and queue usage of container adapter
Chrome删除重复书签
redux Actions may not have an undefined “type“ property. Have you misspelled a constant?
反鸡汤致辞
Concepts and differences of DQL, DML, DDL and DCL
Intentional shared lock, intentional exclusive lock and deadlock of MySQL
产品-Axure9(英文版),原型设计后台动态二级菜单显示内容
[shell] tree command
开源OAuth2框架 实现SSO单点登录
Centos7 MySQL records
307. 区域和检索 - 数组可修改
Cetos7 record
[graduation season · advanced technology Er] it's my choice. I have to walk on my knees
Linux安装mysql8.0.25
[bull Chinese document] queue package used to process distributed jobs and messages in nodejs
【项目实训10】箭头的绘制
896. 单调数列
mysql 索引
The illustration shows three handshakes and four waves. Xiaobai can understand them
[project training 10] drawing of arrows