数据结构与算法面试题数组查找
Posted zhiyong_will
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构与算法面试题数组查找相关的知识,希望对你有一定的参考价值。
题目来源“数据结构与算法面试题80道”。
问题分析:时间复杂度为O(n),即只能遍历一次数组,考虑到数组是排好序的,考虑从头部和从尾部同时向数组的中部遍历,假设i从头部遍历,j从尾部开始遍历:
- 如果a[i] + a[j] == num,直接返回;
- 如果a[i] + a[j] > num,应该减小其和的值,则减小j;
- 如果a[i] + a[j] < num,应该增大其和的值,则增加i;
方法:
void get_sum(int *a, int length, int n){
if (NULL == 0 || length <= 0) return;
int start = 0;
int end = length - 1;
while (start < end){
if (a[start] + a[end] == n){
printf("%d,%d\\n", a[start], a[end]);
break;
}else if (a[start] + a[end] > n){
end --;
}else{
start ++;
}
}
}
以上是关于数据结构与算法面试题数组查找的主要内容,如果未能解决你的问题,请参考以下文章
Java八股文面试题 基础篇 -- 二分查找算法冒泡排序选择排序插入排序希尔排序快速排序