数组的逆序线性搜索算法
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;
【讨论】:
请解释一下这段代码是如何解决问题的。 *** 不欢迎仅代码答案。以上是关于数组的逆序线性搜索算法的主要内容,如果未能解决你的问题,请参考以下文章