开发者社区> 问答> 正文

搜索元素的有效方法

最近,我接受了一次采访,他们问我一个“ 搜索 ”问题。 问题是:

假设有一个(正)整数数组,每个元素都是+1或-1与其相邻元素比较。

例:

array = [4,5,6,5,4,3,2,3,4,5,6,7,8]; 现在搜索7并返回其位置。

我给了这个答案:

将值存储在临时数组中,对其进行排序,然后应用二进制搜索。

如果找到该元素,则返回其在临时数组中的位置。 (如果数字出现两次,则返回其第一次出现)

但是,他们似乎对此答案并不满意。

正确的答案是什么? 问题来源于stack overflow

展开
收起
保持可爱mmm 2020-02-08 13:48:24 400 0
1 条回答
写回答
取消 提交回答
  • 您可以使用通常大于1的步长进行线性搜索。关键的观察结果是,如果eg array[i] == 4和7尚未出现,则7的下一个候选项位于index处i+3。使用while循环可重复直接进入下一个可行的候选对象。

    这是一个实现,略有概括。它找到k数组中的第一个匹配项(受+ = 1限制),或者-1如果没有出现则查找:

    #include <stdio.h> #include <stdlib.h>

    int first_occurence(int k, int array[], int n);

    int main(void){ int a[] = {4,3,2,3,2,3,4,5,4,5,6,7,8,7,8}; printf("7 first occurs at index %d\n",first_occurence(7,a,15)); printf("but 9 first "occurs" at index %d\n",first_occurence(9,a,15)); return 0; }

    int first_occurence(int k, int array[], int n){ int i = 0; while(i < n){ if(array[i] == k) return i; i += abs(k-array[i]); } return -1; } 输出:

    7 first occurs at index 11 but 9 first "occurs" at index -1

    2020-02-08 13:48:36
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
《开放搜索查询分析服务架构分享》 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载