首页 > 试题广场 >

找出数字元素的下标

[编程题]找出数字元素的下标
  • 热度指数:271 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
给定一个整形数组intArray,和一个整形数(记为sum),sum是intArray中某两个元素的和,请将这两个元素找出来,以数组的方式返回这两个元素的下标。要求高效,用C/C++语言实现 函数原型:vector twoSum(vector& nums, int target)

输入描述:
输入数据包括两行:
第一行两个整数n(1 ≤ n ≤ 10 ^ 5),sum(1 ≤ sum ≤ 10 ^ 9)
第二行n个整数,范围均在32位整数内,以空格分隔


输出描述:
如果找到和值为某值的两个数,输出两个数字的下标(数组下标从0开始),如果有多解,输出第一个数下标最小的那个解;否则输出false
示例1

输入

6 9 2 3 5 6 7 10

输出

0 4
#include<stdio.h>
#include<map>
using namespace std;
map<int,int> book;
int a[100005],n,i,target,s,e,flag;
int main(){
    for(scanf("%d%d",&n,&target),i=0;i<n;i++) 
        scanf("%d",a+i),book[a[i]]=i;
    for(i=0;i<n;i++)
        if(book.count(target-a[i])){
            flag=1; break;
        }
    if(flag) printf("%d %d\n",i,book[target-a[i]]);
    else printf("false\n");
}

发表于 2017-11-11 21:46:03 回复(0)
#include<iostream>
#include<vector>
using namespace std;

int getIndex(int n, int sum) {
	vector<int> nums(n);
	for (int x = 0; x < n; ++x) {
		cin >> nums[x];
	}
	int i = 0;
	int j = nums.size() - 1;
	bool solve = false;
	while (i < j) {
		if (nums[i] + nums[j] == sum) {
			cout << i << " " << j << endl;
			solve = true;
			return 0;
		}
		if (nums[i] + nums[j] < sum) {
			i++;
		}
		if (nums[i] + nums[j] > sum) {
			j--;
		}
	}
	if (!solve) {
		cout << "false" << endl;
	}
	nums.clear();
	return 0;
}
int main() {
	int n, sum;
	while (cin >> n >> sum) {
		getIndex(n, sum);
	}
	return 0;
}


发表于 2017-08-30 12:48:44 回复(2)