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

开发者社区> 云计算> 正文

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

简介: 温故知新,基础复习(一个有序从大到小不重复的数列,任意给出一个sum值,求出数列中所有满足和为sum的数对) #include #include void PrintSumNumbers(int Arra[],int ASize,int 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);
}



版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
云计算
使用钉钉扫一扫加入圈子
+ 订阅

时时分享云计算技术内容,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。

其他文章