当前位置:网站首页>Niuke net: somme des trois nombres
Niuke net: somme des trois nombres
2022-06-12 20:03:00 【Lsgoose】


Table des matières
Méthode 1:Violence
Le triple cycle devrait être quelque chose que tout le monde peut penser
Mais ça ne va pas
Et alors?,Utilise juste unO(nlogn)Ordre de complexité pour réduire la complexité,Comment baisser??Les mêmes éléments seront réunis après le tri,On a juste rencontré le même saut direct.
Les codes sont les suivants::
class Solution {
public:
vector<vector<int> > threeSum(vector<int> &num) {
vector<vector<int>> res;
if(num.size()<3) return res;
sort(num.begin(), num.end());
for(int i=0;i<num.size()-2;++i){
if(i&&num[i]==num[i-1]) continue;
for(int j=i+1;j<num.size()-1;++j){
if(j>i+1&&num[j]==num[j-1]) continue;
for(int k=j+1;k<num.size();++k){
if(k>j+1&&num[k]==num[k-1]) continue;
if(num[i]+num[j]+num[k]==0){
res.push_back({num[i],num[j],num[k]});
}
}
}
}
return res;
}
};Méthode 2:Double pointeur
Nous pouvons réduire la complexité temporelle à O(n^2), D'abord, le tri. , Parce que ça nous permet de sauter les éléments répétitifs . Deuxièmement, il est également pratique pour nous d'utiliser le double pointeur .
Ensuite, le nombre dans le tableau est traité comme suit :
1. Définissez le pointeur pour les deux derniers nombres , C'est - à - dire les pointeurs gauche et droit de la zone arrière
- Si la somme des trois nombres est égale à 0, Mettez trois nombres dans la réponse , Ensuite, mettez à jour les deux pointeurs à la position de l'élément non dupliqué
- Si plus de0, Déplacez le pointeur droit d'une position à gauche
- Si moins de0, Déplacez le pointeur gauche vers la droite
La condition de sortie est lorsque la position du pointeur gauche >= La position du pointeur droit
class Solution {
public:
vector<vector<int> > threeSum(vector<int> &num) {
vector<vector<int>> res;
if(num.size()<3) return res;
sort(num.begin(), num.end());
for(int i=0;i<num.size();++i){
if(i&&num[i]==num[i-1]) continue;
int l=i+1,r=num.size()-1;
while(l<r){
if(num[i]+num[l]+num[r]==0){
res.push_back({num[i],num[l],num[r]});
while(l+1<r&&num[l]==num[l+1]) ++l;
while(r-1>l&&num[r]==num[r-1]) --r;
++l,--r;
}else if(num[l]+num[r]+num[i]>0){
--r;
}else{
++l;
}
}
}
return res;
}
};边栏推荐
- 基于微信电子书阅读小程序毕业设计毕设作品(6)开题答辩PPT
- Detailed explanation of search tree and hash table
- Pyinstaller packaging tutorial packaging resource files
- Low code enables rural construction to open "smart mode"
- The Milvus graphical management tool Attu is coming!
- What is the difference between union and union all
- Understand Jack Dorsey's web5 from the ppt on page 16
- Theory + practice will help you master the dynamic programming method
- Unsupported class file major version 60
- Demand and business model innovation-5-process
猜你喜欢

How mysterious is "PIP not an internal or external command, nor a runnable program or batch file"

WordPress optimization tutorial makes WordPress open faster

2022年最新宁夏建筑安全员模拟题库及答案

Understanding of data in memory

Is it really hopeless to choose electronic engineering and be discouraged?

系统 日志

基于微信电子书阅读小程序毕业设计毕设作品(1)开发概要

Negative remainder problem

2 R programming

Centos7 installing PHP
随机推荐
2022年最新宁夏建筑安全员模拟题库及答案
User and group permissions
Microsoft Word tutorial, how to insert a header or footer in word?
synchronized下的 i+=2 和 i++ i++执行结果居然不一样
How to make a computer installation and startup USB flash disk
Theory + practice will help you master the dynamic programming method
Deep feature synthesis and genetic feature generation, comparison of two automatic feature generation strategies
Negative remainder problem
EASYCODE one click plug-in custom template
Programming tool download address
Kyma application connectivity feature introduction
[leetcode] small thinking of optimal division
Unsupported class file major version 60
EFCore调优
Understanding of data in memory
In 2022, 20 cities with the largest number of college students in China
开源深度学习框架PlaidML安装及测试
基于微信电子书阅读小程序毕业设计毕设作品(6)开题答辩PPT
华尔街备忘单(Wall Street Cheat Sheet)
Connectez - vous à MySQL