温故知新,基础复习(一个有序从大到小不重复的数列,任意给出一个sum值,求出数列中所有满足和为sum的数对)
2015-07-21 22:15
363 查看
温故知新,基础复习(一个有序从大到小不重复的数列,任意给出一个sum值,求出数列中所有满足和为sum的数对)
#include<stdio.h> #include<stdlib.h> void PrintSumNumbers(int Arra[],int ASize,int Sum) { //O(1) if (ASize<2) { printf("The size of the Arra is invalid.\n"); return; } if(Sum>=0) { if(Arra[ASize-1]>=Sum || Arra[0]<=0) { printf("The minimum value is bigger than the sum or the maximum value is equal or lesser than 0. \n"); return; } } if (Sum<0) { if (Arra[0]<=Sum || Arra[ASize-1]>=0) { printf("The maximum value is smaller than the sum or the minimum value is equal or greater than 0. \n"); return; } } int LeftIndex=0,RightIndex=ASize-1; int MinTempValue = Arra[ASize-1]; int MaxTempValue = Arra[0]; if (Sum>=0&&MinTempValue<0) { if (MaxTempValue>=0) { MinTempValue = Sum-MaxTempValue; for (int i = ASize-1; i != 0; i--) { if (Arra[i]>=MinTempValue) { RightIndex=i; break; } } } } else { MaxTempValue = Sum-Arra[ASize-1]; for(int i=0;i<RightIndex;i++) { if(Arra[i]<=MaxTempValue) { LeftIndex=i; break; } } } while( LeftIndex<RightIndex) { int TempValue = Arra[LeftIndex]+Arra[RightIndex]; if(TempValue==Sum) { printf("(%d) + (%d) = (%d)\n",Arra[LeftIndex],Arra[RightIndex],Sum ); LeftIndex++; RightIndex--; } else if (TempValue>Sum) { LeftIndex++; } else { RightIndex--; } } } int main() { int Arra[] = {2147483647,2147483646,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-2147483646,-2147483647,-2147483647-1}; PrintSumNumbers(Arra,sizeof(Arra)/sizeof(Arra[0]),2147483647); }
相关文章推荐
- Ubuntu 14.04(32位)安装Oracle 11g(32位)全过程
- Oracle 创建分页存储过程(转帖)
- 哈希表原理及hashmap简单实现
- LeetCode之Maximal Rectangle
- 阿里面试题目总结
- 多线程之线程锁的使用
- 痛并快乐着
- 协程 及 Libco 介绍
- JDBC连接MySql数据库
- Maven实战(坐标和依赖)
- 【树形dp】hdu 1011 Starship Troopers
- Linux僵尸进程的解决
- Github for Windows
- Opencv3.0.0 vs2012 win7配置
- Linux下安装opencv
- 2015第30周二
- Ubuntu系统安装配置Pintos和Bochs
- 13. JavaSE-多态 & 内部类
- 第62讲scala 隐式参数实例解析
- 广搜专题-1002