java打印数组中不重复的数字,不重复打印排序数组中相加和为给定值的所有三元组...

3

#include 

using namespace std;

int main(){

int n, k;

cin>>n>>k;

if(n<1)

cout<<0<

int a[n];

for(int i=0;i

cin>>a[i];

for(int i=0;i

if(i==0 || a[i]!=a[i-1]){

int t = k-a[i];

int l=i+1, r=n-1;

while(l

if(a[l]+a[r]==t){

if(a[l]!=a[l-1])

cout<

l++;

r--;

}else if(a[l]+a[r]

l++;

else

r--;

}

}

}

return 0;

}

发表于 2020-01-29 01:01:34

回复(1)

2

固定一个数a,目标变成了k-a,双标志向中间靠近

发表于 2019-08-20 09:13:36

回复(2)

1

上一题为 求出不重复的二元组

在本题中,我们只需要限定三元组中第一个数,后两个数就跟上一题一摸一样

重点一:

去掉重复,我们保证不重复的二元组的同时,也要保证第一个数不一致

#include

#include

using namespace std;

void printtraid(vector&  vec,int start,int n,int k)

{

int l=start+1,r=n-1;

while(l

{

if((vec[l]+vec[r])==k)

{

//cout<

if(l==0||vec[l]!=vec[l-1]) //确保输出不重复且不会溢出

{

printf("%d %d %d\n",vec[start],vec[l],vec[r]);

}

r--;

l++;

}

else if((vec[l]+vec[r])

{

l++;

}

else{

r--;

}

}

}

int main()

{

int n,k,fin;

cin>>n>>k;

//scanf("%d,%d",&n,&k);

vector vec(n);

for(int i=0;i

{

scanf("%d",&vec[i]);

}

int l=0,r=n-1,min;

for(int i=0;i

{

if(i==0||vec[i]!=vec[i-1])//去重复

{

fin=k-vec[i];

printtraid(vec,i,n,fin);

}

}

return 0;

}

发表于 2020-12-28 19:36:43

回复(0)

1

数据有点坑...

#include 

#include 

using namespace std;

typedef long long ll;

int main() {

ll N, K;

cin >> N >> K;

vector v(N);

for (int i = 0; i 

cin >> v[i];

}

for (int i = 0; i 

if (i == 0 || v[i] != v[i - 1]) {

int L = i + 1, R = N - 1;

while (L 

ll sum = v[i] + v[L] + v[R];

if (sum == K) {

// if (L == i + 1 || v[L] != v[L-1])

// 这题神坑,答案不允许前两个数字相同???

if (v[L] != v[L-1])

cout <

L += 1;

R -= 1;

} else if (sum 

L += 1;

} else {

R -= 1;

}

}

}

}

return 0;

}

发表于 2020-09-06 15:34:40

回复(0)

1

#include

using namespace std;

//这个要求了三元组前两个元素不相等才行(或者题目想说升序三元组?)

int main() {

int N;

cin>>N;

long long k;

cin>>k;

int i;

long long a[N];

long long target, res, nowl, nowr;

int l, r;

for(i = 0; i 

cin>>a[i];

}

for(i = 0; i 

if(i > 0 && a[i] == a[i-1]){

continue;

}

target = k - a[i];

l = i+1;

r = N-1;

while(a[l] == a[i] && l 

l++;

}

while(l 

res = a[l] + a[r];

if(res == target) {

cout<

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值