1. 程式人生 > >查詢陣列中和為s的兩個數字

查詢陣列中和為s的兩個數字

題目:輸入一個遞增排序的陣列和一個數字s,在陣列中查詢兩個數,使得它們的和正好是s。如果有多對數字的和等於s,輸出任意一對即可。

分析:兩個指標,一個從陣列頭部開始向後掃,一個從陣列尾部向前掃,如果兩個指標指向的陣列值的和大於s,則後面的指標向前移,否則前面的指標向後移,直到兩個值得和等於s。

#include <stdio.h>

bool find(int a[], int len, int sum, int *num1, int *num2)
{
	if(a==NULL || len <=0 || num1==NULL || num2==NULL)
		return false;
	int ahead = len -1;
	int behind = 0;
	while(behind < ahead)
	{
		if(a[behind]+a[ahead]==sum)
		{
			*num1 = a[behind];
			*num2 = a[ahead];
			return true;
		}
		else if(a[behind]+a[ahead]>sum)
			ahead--;
		else
			behind++;
	}
	return false;
}

int main()
{
	int sum,num1,num2;
	int a[] = {1,2,4,7,11,15};
	int len = sizeof(a)/sizeof(int);
	int i;
	printf("陣列值為:\n");
	for(i=0;i<len;i++)
		printf("%d\t",a[i]);
	printf("\n");
	printf("請輸入兩個整數和的值:\n");
	scanf("%d",&sum);
	if(find(a,len,sum,&num1,&num2))
		printf("陣列中%d和%d的值為%d\n",num1,num2,sum);
	else
		printf("沒有找到這樣的整數\n");
	return 0;
}


相關推薦

查詢陣列中和s數字

題目:輸入一個遞增排序的陣列和一個數字s,在陣列中查詢兩個數,使得它們的和正好是s。如果有多對數字的和等於s,輸出任意一對即可。 分析:兩個指標,一個從陣列頭部開始向後掃,一個從陣列尾部向前掃,如果兩個指標指向的陣列值的和大於s,則後面的指標向前移,否則前面的指標向後移,直

SBS(5)-- 陣列中和s數字Python

輸入一個遞增排序的陣列, 和一個數字s, 在陣列中查詢兩個數,使得他們的和正好是s。 # -*- coding:UTF-8 -*- ''' 找出整型數組裡除了兩個數字以外,其它都出現了兩次。要求時間複雜度是O(n) 空間複雜度是 O(1) '''

求給定陣列中和s數字

題目:輸入一個遞增排序的陣列和一個數字s,在陣列中查詢兩個數,使得它們的和正好是s。如果有多對數字的和等於s,輸出任意一對即可。  例如:輸入陣列{1,2,4,7,11,15}和數字15.由於4+11=15,一次輸出4和11.   思路: (1)    如果按照開始直觀的想

《劍指offer》:[41]陣列中和S個數

題目:輸入一個遞增排序的陣列和一個數字S,在陣列中查詢兩個數,是的它們的和正好是S。如果有多對數字的和等於S,輸出其中的一對即可。 例如輸入陣列{1,2,4,7,11,15}和數字15.由於4+11=15,因此輸出4和11。方案一:時間複雜度為O(N*N)。順序查詢法,固定

java--Fibonacc由數字1、1、2、3...組成的,從第三個數字起每一個數字為兩個數字的和。建立一個方法,接受一個整數引數,顯示從第一元素開始總共由該引數指定的個數所構成的所有斐波那契數

題目完整描述:一個斐波那契數列是由數字1、1、2、3、5、8、13、21、34等等組成的,其中每一個數字(從第三個數字起)都是前兩個數字的和。建立一個方法,接受一個整數引數,並顯示從第一個元素開始總共由該引數指定的個數所構成的所有斐波那契數字。例如,如果執行 java Fibonacci 5(Fib

查詢陣列中和某給定值的三元組

問題描述 給定一個數組arr,以及一個數字target。求陣列中和為target的三個數。要求給出所有解。陣列中的每個數在每組解中只能出現一次。 解法 方法一:如果用暴力方法,時間複雜度是o(n3) 方法二:利用C++11中的unordere

程式設計師面試一百題-10-在排序陣列查詢給定值的數字

1-題目 : 輸入一個已經按升序排序過的陣列和一個數字,在陣列中查詢兩個數,使得它們的和正好是輸入的那個數字;要求時間複雜度是O(n);如果有多對數字的和等於輸入的數字,輸出任意一對即可。 2-示例 : 輸入 : 1、2、4、7、11、15和15 輸出 : 4、11 3-思路 :

找出排序陣列中和給定值的數字

題目:輸入一個已經按升序排序過的陣列和一個數字,在陣列中查詢兩個數,使得它們的和正好是輸入的那個數字。要求時間複雜度是O(n)。如果有多對數字的和等於輸入的數字,輸出任意一對即可。 例如:A[]={1,2,3,4,5,6,7,8,9}, sum = 15,輸出

s數字

最小 else 初始化 air 應該 small ++ while iterator 牛客上要求返回乘積最小的,實際上不用麻煩去寫另外一個函數,第一次找到兩個數字的乘積就一定是最小的。 在調試程序時也遇到兩個問題: 1.既然用到了vector容器,頭文件就應該聲明#inc

[程序猿面試題精選100題]10.排序數組中和給定值的數字

連續正數序列 ati 試題 連續 tails blog div 劍指offer ott 劍指Offer之和為S的兩個數字 劍指Offer之和為S的連續正數序列 擴展(1):輸入一個數組,推斷這個數組中是

42、和S數字

new util pan arraylist 和為s的兩個數字 pre numbers 查找 [] 一、題目 輸入一個遞增排序的數組和一個數字S,在數組中查找兩個數,是的他們的和正好是S,如果有多對數字的和等於S,輸出兩個數的乘積最小的。 二、解法 1 import j

python 和S數字

enumerate body class div clas spa enum 代碼 循環 輸入一個遞增排序的數組和一個數字S,在數組中查找兩個數,是的他們的和正好是S,如果有多對數字的和等於S,輸出兩個數的乘積最小的。 運用到的知識;   1.判斷是否是統一類型:   

s數字 java

和為s的兩個數字 java 題目描述 輸入一個遞增排序的陣列和一個數字S,在陣列中查詢兩個數,使得他們的和正好是S,如果有多對數字的和等於S,輸出兩個數的乘積最小的。 輸出描述: 對應每個測試案例,輸出兩個數,小的先輸出。 程式碼1: import java.u

劍指offer -- 和 S數字

題目描述 輸入一個遞增排序的陣列和一個數字S,在陣列中查詢兩個數,使得他們的和正好是S,如果有多對數字的和等於S,輸出兩個數的乘積最小的。 AC程式碼 思路雖然很簡單,但是需要注意的地方有很多。 繼續努力。 import java.util.ArrayList; public

劍指offer系列(十五)和S的連續正數序列,和s數字,左旋轉字串

和為S的連續正數序列 題目描述 小明很喜歡數學,有一天他在做數學作業時,要求計算出9~16的和,他馬上就寫出了正確答案是100。但是他並不滿足於此,他在想究竟有多少種連續的正數序列的和為100(至少包括兩個數)。沒多久,他就得到另一組連續正數和為100的序列:18,19,20,21,22。現

劍指Offer值和S數字

題目描述 輸入一個遞增排序的陣列和一個數字S,在陣列中查詢兩個數,使得他們的和正好是S,如果有多對數字的和等於S,輸出兩個數的乘積最小的。 思路 l表示左側位置,r表示右側位置。不斷向中間靠攏,如果array[l]+array[r] == sum,則找到正確結果,如果l>

演算法題004 -- [給定一個整數的陣列nums,返回相加target的數字的索引值] by java

題目 給定一個整數的陣列nums,返回相加為target的兩個數字的索引值。 假設每次輸入都只有一個答案,並且不會使用同一個元素兩次。 舉例: Given nums = [2, 7, 11, 15], target = 9, Because nums[0] + nums

劍指offer 面試題41:和s數字vs和s的連續正數序列 c++

題目:輸入一個遞增排序的陣列和一個數字S,在陣列中查詢兩個數,使得他們的和正好是S,如果有多對數字的和等於S,輸出兩個數的乘積最小的。 思路:兩個 指標,start從前往後遍歷,end從後往前遍歷,如果當前前後之和大於s,end--,如果當前前後之和小於s,start++,這樣能找出乘積最小的和

劍指offer 42. 和s數字

原題 輸入一個遞增排序的陣列和一個數字S,在陣列中查詢兩個數,使得他們的和正好是S,如果有多對數字的和等於S,輸出兩個數的乘積最小的。 輸出描述: 對應每個測試案例,輸出兩個數,小的先輸出。 Reference Answer 思路分析 設定兩個指標,一個指向陣列的起點

《劍指offer》系列 和S數字(Java)

連結 牛客:和為S的兩個數字 題目描述 輸入一個遞增排序的陣列和一個數字S,在陣列中查詢兩個數,使得他們的和正好是S,如果有多對數字的和等於S,輸出兩個數的乘積最小的。 輸出描述: 對應每個測試案例,輸出兩個數,小的先輸出。 思路 初始化兩個指標分別是第一個和