第J题-=数组中等于K的数对(详解) =======给出一个整数K和一个无序数组A,A的元素为N个互不相同的整数
给出一个整数K和一个无序数组A,A的元素为N个互不相同的整数,找出数组A中所有和等于K的数对。例如K = 8,数组A:{-1,6,5,3,4,2,9,0,8},所有和等于8的数对包括(-1,9),(0,8),(2,6),(3,5)。
Input
第1行:用空格隔开的2个数,K N,N为A数组的长度。(2 <= N <= 50000,-10^9 <= K <= 10^9)
第2 - N + 1行:A数组的N个元素。(-10^9 <= Aii <= 10^9)
Output
第1 - M行:每行2个数,要求较小的数在前面,并且这M个数对按照较小的数升序排列。
如果不存在任何一组解则输出:No Solution。
Sample Input
8 9
-1
6
5
3
4
2
9
0
8
Sample Output
-1 9
0 8
2 6
3 5
上思路:
1.给一个数组,先将其从小到大排序【】
2.将第一个数与最后一个数相加比较其和与题定值的大小,若大于则应改小点,前一位不变,将最后一位换成倒数第二位,重复,直到等于或小于题定值,等于则输出,小于则退出循环,开始第二位
3.若第一次循环结束,第一位比较到倒数第k个数,则因第二位比第一位大,所以第二位不再从最后一位开始相加,直接比较第二位和倒数第k位的和
4.若相加时,前面和后面重合或前面大于后面,退出循环,因为不能有重复的
C++:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n;
long long a[50010],k;
int main()
{scanf("%lld%d",&k,&n);bool temp=false;for(int i=1;i<=n;i++)//从第一位开始录入scanf("%lld",&a[i]);sort(a+1,a+n+1);for(int i=1;i<=n;i++){//核心代码if((a[i]+a[n])<k)continue;//如果相加小于题定值,退出本次循环for(int j=i+1;j<=n&&a[i]+a[j]<=k;j++){if(a[i]+a[j]==k){temp=true;printf("%lld %lld\n",a[i],a[j]);}}}if(!temp)printf("No Solution\n");return 0;}
JAVA:不建议,耗时长,辅助理解
import java.util.Arrays;
import java.util.Scanner;public class paixu {public static void main(String []ages){Scanner sc=new Scanner(System.in);int num=sc.nextInt();//题定值int n=sc.nextInt();int arr[]=new int[n];for(int i=0;i<n;i++)arr[i]=sc.nextInt();Arrays.sort(arr);//排序int i=0;int dex=1;//dex为判断是否有配对的,有为0while(i!=n-1)//核心代码 i为第相加时前一个值,n-1为后一个值{if(arr[i]+arr[n-1]==num)//有配对的{dex=0;//若有置0System.out.println(arr[i]+" "+arr[n-1]);i++;//开始下一个循环}else if(arr[i]+arr[n-1]>num)//如果相加大的话就前移n--;else//小于题定值i++;}if(dex==1)//如果没有System.out.println("No Solution");}
}
第J题-=数组中等于K的数对(详解) =======给出一个整数K和一个无序数组A,A的元素为N个互不相同的整数相关推荐
- js数组中foEach和map的用法详解 jq中的$.each和$.map
数组中foEach和map的用法详解 相同点: 1.都是循环遍历数组(仅仅是数组)中的每一项. 2.forEach() 和 map() 里面每一次执行匿名函数都支持3个参数:数组中的当前项value, ...
- js数组中indexOf/filter/forEach/map/reduce详解
今天在网上看到一篇帖子,如题: 出处:前端开发博客 (http://caibaojian.com/5-array-methods.html) 在ES5中一共有9个Array方法,分别是: Array. ...
- 蓝桥杯-K好数(详解易懂)java
蓝桥杯-K好数java 问题描述 如果一个自然数N的K进制表示中任意的相邻的两位都不是相邻的数字,那么我们就说这个数是K好数.求L位K进制数中K好数的数目.例如K = 4,L = 2的时候,所有K好数 ...
- 把数组排列成最小的数(详解)
题目: 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个.例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323. 题目解析: ...
- 描述:给出若干个数,将数字存储在数组中,然后使用插入排序,按照升序排列出输出数字。输入一个整数n表示有n个数,接着输入这n个数。按照升序输出这n个数。输入输出示例:输入:53 2
#include<stdio.h> int main() {int k, x, N,i;scanf("%d", &N);int a[100];//随便定义了一个 ...
- 【OpenCV4】查找图像,数组中最大最小值 cv::minMaxLoc() 使用详解(c++)
函数原型 1: void cv::minMaxLoc ( InputArray src,double * minVal,double * maxVal = 0,Point * minLoc = 0,P ...
- 删除重复的数字c语言,(C语言)删去一维数组中所有相同的数
<(C语言)删去一维数组中所有相同的数>由会员分享,可在线阅读,更多相关<(C语言)删去一维数组中所有相同的数(2页珍藏版)>请在人人文库网上搜索. 1.1. 删去一维数组中所 ...
- C语言判断数组中是否存在该数
C语言判断数组中是否存在该数 #include<stdio.h> int main() {int query(int a[10],int num);int num;printf(" ...
- numpy找到数组中符合条件的数
numpy找到数组中符合条件的数 import numpy as nparr = np.array([1, 1, 1, 134, 45, 3, 46, 45, 65, 3, 23424, 234, 1 ...
最新文章
- 从原理到落地,七大维度详解矩阵分解推荐算法
- 第八周项目5-定期存款利息计算器
- 一名 40 岁“老”程序员的反思~
- 【重温基础】2.流程控制和错误处理
- python中静态方法可以访问对象变量_python 面向对象-实例变量、类变量、实例方法、类方法、静态方法...
- ASP.NET MVC3 异步刷新
- Hexo文章图片存储选七牛(当然支持MD都可以)
- PowerDesigner基础使用教程
- Tcpdump的详细用法
- 欧盟《一般数据保护法案》(GDPR)核心要点 本文更多的是站在企业角度来思考法案对物联网行业的影响以及应对措施,一来希望与同行企业可以就GDPR进行更多的互动讨论;二来也是希望传播国际法案对于安全和
- ubuntu 添加证书
- UI设计中的原型图用什么工具?怎么做?给谁看?
- java.lang.IllegalArgumentException: Merged region H2 must contain 2 or more cells
- 决策树之CART算法
- QQ向陌生人聊天的autoit脚本
- 扫码点餐有哪些优势?
- vim中文乱码问题解决方式
- maven项目中 org.hibernate.MappingNotFoundException: resource:**.hbm.xml not found问题的解决方案
- Android 手机上利用adb shell模拟手机相关操作
- 向量旋转(或矢量旋转或坐标轴旋转)后xy坐标重定位(vivado+cordic ip核+matlab) - 适用于数学爱好者