首页 > 试题广场 >

不重复打印排序数组中相加和为给定值的所有二元组

[编程题]不重复打印排序数组中相加和为给定值的所有二元组
  • 热度指数:15283 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给定排序数组arr和整数k,不重复打印arr中所有相加和为k的不降序二元组
例如, arr = [-8, -4, -3, 0, 1, 2, 4, 5, 8, 9], k = 10,打印结果为:
1, 9
2, 8
[要求]
时间复杂度为,空间复杂度为

输入描述:
第一行有两个整数n, k
接下来一行有n个整数表示数组内的元素


输出描述:
输出若干行,每行两个整数表示答案
按二元组从小到大的顺序输出(二元组大小比较方式为每个依次比较二元组内每个数)
示例1

输入

10 10
-8 -4 -3 0 1 2 4 5 8 9

输出

1 9
2 8

备注:

头像 快支棱起来的椰子很愤怒
发表于 2022-01-07 15:39:35
n, k = map(int, input().split()) arr = list(map(int, input().split())) i, j = 0, n - 1 re = set() while i < j: if arr[i] + arr[j] == k: 展开全文
头像 gaya
发表于 2021-01-30 21:52:00
双指针的应用 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main { public static void main(S 展开全文
头像 牛客475801769号
发表于 2022-04-03 17:48:26
#include using namespace std; /给定排序数组arr和整数k,不重复打印arr中所有相加和为k的不降序二元组 例如, arr = [-8, -4, -3, 0, 1, 2, 4, 5, 8, 9], k = 10,打印结果为: 1, 9 2, 8/ /思路:前后两个指针, 展开全文
头像 哈哈~柳暗花明
发表于 2020-07-22 09:28:08
需要考虑重复数据的问题,开始没有想到用双指针,后来解决了,是in在list和dict查找的效率问题,严格一点空间复杂度过不了1、超时 n, k = map(int, input().split()) l = list(map(int, input().split())) for i in range 展开全文
头像 无语的花生米复盘中
发表于 2022-03-05 22:25:19
那么问题来了,我用bfio就是不行,indexoutofbound package main import ( "fmt" "sort" ) func main() { var ( l, tar int ) fmt.Scanln(&l,&tar) // 展开全文
头像 我是牛牛呀
发表于 2020-02-26 21:51:12
题意本就考双指针,但是一直提交都错,无论是重复输入多组,还是重复输出,什么的都考虑清楚了,一直没有通过,最后看了题解,我和前面大佬写的几乎一样,唯一有个地方不一样的就是我考虑了越界问题,而就是这么巧,越界问题不考虑就AC了,真的奇怪。 #include <bits/stdc++. 展开全文
头像 胖橘不乖
发表于 2022-05-23 15:16:35
import java.util.Scanner; public class Main{     public static void dfs(int[] arr,int k){         int n = arr.length; &n 展开全文
头像 青春的律动
发表于 2022-04-23 20:42:25
public class Main { public static void printUniquePair(int[] arr, int k) { if (arr == null || arr.length < 2) { return; } int left = 0; int r 展开全文
头像 994🍔
发表于 2019-09-08 23:45:13
利用头尾指针判断 import java.util.Scanner; public class Main { public static void fun(int[] arr,int key,int len){ int pre = 0; int end = 展开全文