给定排好序的数组A,大小为n,现给定数X,判断A中是否存在两数之和等于X
2016-04-25 17:16
302 查看
原文链接
2,采用先排序,从中间往两边找的顺序,如果和大了,则左边的数往左移;如果和小了,则右边的数往右移。
题目:
给定排好序的数组A,大小为n,现给定数X,判断A中是否存在两数之和等于X,请用C、C++或Java语言实现这一算法,要求速度越快越好。解:
static Boolean Find(int[] arr, int sum) { // 对数组排序 Arrays.sort(arr, 0, arr.length); int i = ( arr.length - 1 ) / 2; int j = i + 1; while ( ( i >= 0 ) && (j < arr.length)) { // 找到 if(arr[i] + arr[j] == sum) { System.out.println(arr[i]+"+"+arr[j]+"="+sum); return true; } else if(arr[i] + arr[j] > sum) { --i; } else // (arr[i] + arr[j] < sum) { ++j; } } // goes here System.out.println("未找到! "); return false; }
小结:
1,时间复杂度为O(n);2,采用先排序,从中间往两边找的顺序,如果和大了,则左边的数往左移;如果和小了,则右边的数往右移。
相关文章推荐
- Oracle 11g笔记——自动存储管理(ASM)
- asp.net mvc中加入log4net记录错误日志
- Elasticsearch
- linux文件系统问题:wrong fs type, bad option, bad superblock
- Linux 定时任务
- Linux 定时任务
- 在按顺序递增的数组中查找缺少的某一个数字
- 获取数组中出现次数最多的字母(使用对象的方法)
- mysql union和union all的区别
- SGI STL 的 一,二级配置器浅析
- Oracle 11g笔记——调整表空间和数据文件的大小、移动数据文件、联机重做日志文件、控制文件
- 转:svn 更新指定文件夹
- jQuery点击图片弹出放大可拖动图片查看
- nity3D自动打包ipa
- Linux Ethernet Over Usb
- Linux配置查询
- BSON 1.0版本规范(翻译)
- 【并发编程】Future和FutureTask以及CompletionService
- UIViewController数据刷新
- 【BZOJ1324】Exca王者之剑【最小割】