温故知新,基础复习(一个有序从大到小不重复的数列,任意给出一个sum值,求出数列中所有满足和为sum的数对)

温故知新,基础复习(一个有序从大到小不重复的数列,任意给出一个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);
}
时间: 2024-12-24 15:18:39

温故知新,基础复习(一个有序从大到小不重复的数列,任意给出一个sum值,求出数列中所有满足和为sum的数对)的相关文章

云栖大会不能错过的一个专场——阿里大数据

2017云栖大会 不能错过的一个专场--阿里大数据论坛 系统性揭秘阿里巴巴背后的数据中台,如何从EB级别海量数据中掘金 导语: 将阿里十余年在大数据领域沉淀的技术能力和应用实践对外分享,首次系统性解密阿里大数据体系:构建了从底层的数据采集.处理,到挖掘算法.应用.产品服务的全链路.标准化的大数据体系,使得超过EB级别的海量数据能够高效融合,并以秒级的响应速度,服务并驱动自身的业务和外部千万用户的发展. 就在10月11日,阿里大数据与您不见不散!

大产品小项目大流程小细节大框架小设计

网页制作Webjx文章简介:交互设计的大与小(大兵小将). 首先解释一下啊,大兵小将只是借用了下年初热映电影的名字,本文跟该电影没有任何瓜葛.最近在做一些产品的维护项目,实际上在现有成型产品的基础上进行完善.想到最近因一桩桩口水战引出的微创新概念,以及题目中提到的大兵小将,突然觉得最近做的项目情况也是这样一种状态:在大产品下做一些小项目的设计,在大产品的规范性下做一些交互的微创新.于是乎,用了个交互设计之大兵小将作为题目,总结下最近的工作情况和感想.起了名后,突然发现自己也不经意间用了热门概念,

阿里巴巴与大华小间距LED屏的故事

有一个关于阿里巴巴与大华小间距LED屏的故事,它没收录在<天方夜谭>,也不发生在巴格达,而是在最近全球瞩目的德国汉诺威消费电子信息及通信博览会上,生动讲述了一个优秀的国际互联网企业的创新梦想和一个领先的民族屏显品牌的品质追求. 大华股份小间距LED屏助力阿里巴巴展示全球领导力 2015年德国汉诺威消费电子.信息及通信博览会(CeBIT2015),是全球最知名的以"数字经济"为主题的IT和通信产业(ICT)盛会.本届盛会,共吸引了包括阿里巴巴.华为.中兴.京东在内的600余家

Illustrator设计一个简单可爱的卡通小狗头像教程

给各位Illustrator软件的使用者们来详细的解析分享一下设计一个简单可爱的卡通小狗头像的教程. 教程分享: 1.在Ai软件中,新建一个800*800的文档,选择椭圆工具,画一个椭圆图形,并填充颜色,如图所示   2.然后选择钢笔工具,勾出如下的图形,并填充颜色,如图所示   3.再选择钢笔工具,勾出如下的图形,并填充颜色,如图所示   4.接着选择椭圆工具,按住shift画多个正圆图形,并填充颜色,如图所示   5.再选择椭圆工具,画多个圆形,并填充颜色,如图所示   6.最后再用钢笔工具

温故知新,基础复习(二叉堆排序)

温故知新,基础复习(二叉堆排序) 最小堆(最终数组的数据是降序),最大堆(最终数组的数据是升序) 下例是最小堆 #include <stdio.h> #include <stdlib.h> void Swap(int Arra[],unsigned int LeftIndex,unsigned int RightIndex) { int TeampValue = Arra[LeftIndex]; Arra[LeftIndex]=Arra[RightIndex]; Arra[Righ

温故知新,基础复习(快速排序及优化)

温故知新,基础复习(快速排序及优化) 使用了三值取中和插排优化 #include<stdio.h> #define InsertSortNumber 10 void InsertSort(int Arra[],unsigned int LowIndex,unsigned int HighIndex) { printf("low=%d,high=%d\n",LowIndex,HighIndex); for (unsigned int i = LowIndex + 1; i &

全球正在同步上演一个大片:大数据的速度与激情

"经过50年的发展,人类和数据技术高度整合,这在以前是无法想象的事情.当下正是物联网时代,做好大数据,就是要让数据来讲故事,通过通俗易懂的可视化分析,让人们理解并相信,我们处在一个非常美好的时代--"近日,2016全球大数据应用研究论坛在青岛西海岸新区举行,美国未来之窗科技公司创始合伙人.首席执行官斯考特·克罗索斯基在主题演讲时表达了上述观点. 在为期3天的论坛上,来自国内外的600余位大数据专家学者.行业精英共同发布了<黄岛共识>,认为全球已进入以数据研究应用为导向的&q

应用-麻烦大神写出一个c++程序出来

问题描述 麻烦大神写出一个c++程序出来 几何图形的简单计算.内容是用C++设计一个业务处理系统,其业务就是进行简单的几何计算:l输入圆的半径,计算并输出圆的周长和面积:l输入圆柱的半径和高,计算并输出圆柱的表面积和体积:l输入圆锥的半径和高,计算并输出圆锥的表面积和体积:l输入圆球的半径,计算并输出圆球的表面积和体积:l输入长方形的长和宽,计算并输出长方形的周长和面积:l输入长方体的长.宽和高,计算并输出长方体的表面积和体积.要求:①必须设计圆.圆柱.圆锥.圆球.长方形.长方体等类:②必须应用

java-JAVA基础问题,请各位大神详细说下

问题描述 JAVA基础问题,请各位大神详细说下 这个为什么最后输出的是goodandgbc,为啥str没变,char变了呢? 解决方案 形参一般是不改变实参的值的,除非申明为引用,比如你传个int a进去,子函数内部相当于另外新建了一个int型变量b,然后使得b=a,之后的操作都是对于b而言的,a的值不会改变.但是如果你传的是的地址,你可以在子函数里改变这个地址所指向的对象的值. 像数组的传递,基本上就是把数组的首地址传递过去,所以在子函数对这个形参数组的操作会改变主函数里实参数组的值,因为它们