求解一个数组里等于给定整数和的两个数的O(n)时间复杂度算法
2016-09-21 20:47
393 查看
[cpp] view
plain copy
#include <iostream>
using namespace std;
#define size 10
//求一個有序数组中和等于某个数的算法
//若成功则返回1 若失败则返回-1
//采用从两端分别降低区间
int togetherAdd(int arr[],int value)
{
int i=0;
int j=size-1;
while(i<=j)
{
if(i==j)return -1;
if((arr[i]+arr[j])==value)return 1;
if((arr[i]+arr[j])>value)j--;
if((arr[i]+arr[j])<value)i++;
}
}
int main()
{
int arr[]={1,5,12,13,20,100,111,112,200,400};
cout<<togetherAdd(arr,121);
return 0;
}
plain copy
#include <iostream>
using namespace std;
#define size 10
//求一個有序数组中和等于某个数的算法
//若成功则返回1 若失败则返回-1
//采用从两端分别降低区间
int togetherAdd(int arr[],int value)
{
int i=0;
int j=size-1;
while(i<=j)
{
if(i==j)return -1;
if((arr[i]+arr[j])==value)return 1;
if((arr[i]+arr[j])>value)j--;
if((arr[i]+arr[j])<value)i++;
}
}
int main()
{
int arr[]={1,5,12,13,20,100,111,112,200,400};
cout<<togetherAdd(arr,121);
return 0;
}
相关文章推荐
- 求解一个数组里等于给定整数和的两个数的O(n)时间复杂度算法
- Java算法给定一个整数数组,找出其中两个数相加等于目标值
- 给定一个存放整数的数组,重新排列数组使得数组左边为奇数,右边为偶数。 要求:空间复杂度O(1),时间复杂度为O(n)。
- 描述一个运行时间为O(nlgn)的算法,使之能在给定一个由n个整数构成的集合S和另一个整数 X 时,判断出S中是否存在有两个其和刚好等于 X 的元素。
- Java算法给定一个整数数组,找出其中两个数相加等于目标值
- 题目:请给出一个运行时间为Θ(nlgn)的算法,使之能在给定一个由n个整数构成的集合S和另一个整数x时,判断出S中是否存在有两个其和等于x的元素。
- 给定一个存放整数的数组,重新排列数组使得数组左边为奇数,右边为偶数。要求:空间复杂度O(1),时间复杂度为O(n)
- 题目:输入一个已经按升序排序过的数组和一个数字, 在数组中查找两个数,使得它们的和正好是输入的那个数字。 要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。 例如输入数组1、2、4、7、11、15和数字15。由于4+11=15,
- 题目1.请给出一个运行时间为O(nlgn)的算法,使之能在给定一个由n个整数构成的集合S和另一个证书x时,判断出S中是否存在有两个其和等于x的元素。
- 给一个整数数组,找到两个数使得他们的和等于一个给定的数 target(容易)
- 4.给定一个存放整数的数组,重新排列数组使得数组左边为奇数,右边为偶数。 要求:空间复杂度O(1),时间复杂度为O(n)
- 判断一个整数数组中是否有重复数字出现的O(n)时间复杂度算法
- 题目四:给定一个数组,值可以为正、负和0,请返回累加和小于等于k的最长子数组长度。 时间复杂度:O(n)
- 百度笔试:给定一个存放整数的数组,重新排列数组使得数组左边为奇数,右边为偶数。 要求:空间复杂度O(1),时间复杂度为O(n)
- 一个数组,其中除两个数外,其余的数全是成对出现的,用时间复杂度O(n),空间复杂度O(1)求解不成堆出现的两个数
- 两数之和:给定一个整数数组,找出其中两个数相加等于目标值
- leetcode-java.T001_TwoSum 给定一个整数数组,找出其中两个数满足相加等于你指定的目标数字
- 给定一个未排序的整数数组,找到第一个缺失的正整数 您的算法应在O(n)时间运行,并使用恒定空间。
- 已知一个整数数组A[n],写出算法实现将奇数元素放在数组的左边,将偶数放在数组的右边。要求时间复杂度为O(n)。
- 求一个二维整数数组最大子数组之和,时间复杂度为N^2