#include<stdio.h>
#include<algorithm>
#include<stdlib.h>
#include<math.h>
using namespace std;
void threeSum(int num[],int n){//三数之和
sort(num,num+n);
if(n==0)
return;
if(num[0]>0||num[n-1]<0){
return ;
}
for(int k=0;k<n-2;k++){
if(num[k]>0){
return;
}
if(0!=k && num[k]==num[k-1]){
continue;
}
int i=k+1,j=n-1;
int target=0-num[k];
while(i<j){
if(num[i]+num[j]>target){
j--;
}
else if(num[i]+num[j]<target){
i++;
}
else{
printf("{%d,%d,%d}",num[k],num[i],num[j]);
j--;
i++;
while(i<j&&num[i]==num[i-1]){
i++;
}
while(i<j&&num[j]==num[j+1]){
j--;
}
}
}
}
}
int threeSumcloset(int sum[],int target,int n){//最接近的三数之和
int temp=9999999;
int closesum;
int t=0;
sort(sum,sum+n);
if(n<3){
return -1;
}
for(int i=0;i<n-2;i++){
int left=i+1,right=n-1;
while(left<right){
int sum1=sum[i]+sum[left]+sum[right];
if(sum1==target){
return 0;
}
int closesum=abs(sum1-target);
if(closesum<temp){
t=sum1;
temp=closesum;
}
if(sum1<target){
left++;
}
else if(sum1>target){
right--;
}
}
}
return t;
}
void fournumbersum(int sum[],int target,int n){//四数之和
if(n<4)
return;
if(n==4&&sum[0]+sum[1]+sum[2]+sum[3]==target){
printf("{%d,%d,%d,%d}",sum[0],sum[1],sum[2],sum[3]);
return;
}
sort(sum,sum+n);
for(int i=0;i<n-3;i++){
if(i!=0&&sum[i]==sum[i-1]){
continue;
}
for(int j=i+1;j<n-2;j++){
if(j!=i+1&&sum[j]==sum[j-1]){
continue;
}
int left=j+1,right=n-1;
while(left<right){
int s=sum[i]+sum[j]+sum[left]+sum[right];
if(s<target){
left++;
}
else if(s>target){
right--;
}
else{
printf("{%d,%d,%d,%d}",sum[i],sum[j],sum[left],sum[right]);
left++;
right--;
while(left<right&&sum[left]==sum[left-1]){
left++;
}
while(left<right&&sum[right]==sum[right+1]){
right--;
}
}
}
}
}
}
int main(){
int n,target;
scanf("%d%d",&n,&target);
int a[100];
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
}
//threeSum(a,n);
//printf("%d\n",threeSumcloset(a,target,n));
fournumbersum(a,target,n);
}
lc5-三数之和,最接近三数之和,四数之和
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。