数组的逆序线性搜索算法

Posted

技术标签:

【中文标题】数组的逆序线性搜索算法【英文标题】:Linear Search Algorithm of an Array in reverse order 【发布时间】:2020-08-14 06:36:38 【问题描述】:

我需要以相反的方式找出数组中的一个元素,即检查从最后一个元素到第一个元素的元素

这是我的代码

public static int linearSearch(int[] array, int key) 
    int size = array.length - 1;
    for (int i = size; i > 0; i--) 
        if (array[i] == key) 
            return i;
        
    
    return -1;

   

这是我的测试用例 -

count = 10
array  = 44 55 66 77 88 22 11 66 99 33
key = 66

它的输出是 7 这是错误的 它的实际输出显然是 2。 我不知道我的逻辑哪里出错了。

另外我也不知道怎么实现(如果键重复,则以相反的顺序打印键第一次出现的索引。)

【问题讨论】:

“它的输出是 7,这是错误的”是什么意思?为什么是错的?你期望什么输出?如果你应该从后面返回第一个匹配的索引,那么 7 应该是正确的。但作为补充说明,在您的 for 循环中,您应该运行到 i => 0 以同时捕获数组中的第一个索引。 实际上我需要从该数组的最后一个到第一个进行计算,例如如果我们想搜索 33,它是最后一个索引,即第 9 个索引,我想将其打印为 index=0,因为我从右到离开 那么为什么 index=1 呢?如果从右数第一个不应该是 0 吗? 在我的第一条评论中,显然是i >= 0。但不能再编辑了。 对不起我的错误,但你有我的问题吗? @maloomeister 【参考方案1】:

所以在关于你真正想要什么的一些矛盾之后,我想我现在得到了你。这段代码应该适合你:

public static void main(String[] args) 

    int[] array =  44, 55, 66, 77, 88, 22, 11, 66, 99, 33 ;
    int key = 66;
    int result = linearSearch(array, key);
    System.out.println("Index from the right for value " + key + " is: " + result);


public static int linearSearch(int[] array, int key) 
    int size = array.length - 1;
    for (int i = size; i >= 0; i--) 
        if (array[i] == key) 
            return size - i;
        
    
    return -1;

输出是:

Index from the right for value 66 is: 2

解释:

for 循环从 size 向后循环到 0。如果找到匹配项,则从右侧返回索引,即size - i

【讨论】:

【参考方案2】:

如果你想从最后返回迭代次数,你可以创建一个int并返回迭代值

   public static int linearSearch(int[] array, int key) 
        int size = array.length - 1;
        int iteration =-1;
        for (int i = size; i >= 0; i--) 
            iteration++;
            if (array[i] == key) 
                return iteration;
            
        
        return -1;
    


【讨论】:

查看测试用例 示例输入:7 6 8 3 5 9 1 2 9 示例输出:2 这里的输出是 2,因为数字 9 的位置是问题中提到的相反顺序的 2。 在本例中,数组 [7,6,8,3,5,9,1,2,9] 和键为 [9],返回的答案是 0【参考方案3】:

如果您还想返回“反向”索引,则必须在 return 语句中考虑到这一点:

public static int linearSearch(int[] array, int key)

    int size = array.length - 1;
    for (int i = size; i > 0; i--)
        if (array[i] == key)
            return size - i;
    return -1;

【讨论】:

请解释一下这段代码是如何解决问题的。 *** 不欢迎仅代码答案。

以上是关于数组的逆序线性搜索算法的主要内容,如果未能解决你的问题,请参考以下文章

算法:搜索数字,从有逆序的顺序数组33. Search in Rotated Sorted Array

算法常见数组搜索算法

算法习题---线性表之单链表逆序打印

Python算法-冒泡排序、线性和二分搜索

经典面试算法题:线性查找有序二维数组

JavaScript 中常见的搜索算法