【问题标题】:Fixed Point (Value equal to index) in a given array using Linear Search - Logic question使用线性搜索的给定数组中的定点(值等于索引) - 逻辑问题
【发布时间】:2020-08-06 13:20:24
【问题描述】:

有人可以解释为什么使用下面的这种方法只返回数组中的第一个匹配值吗?例如,如果我的数组元素是 0、1、2、3 和 4。它将返回 0,而不是 4。数组中的每个值都与其索引 4 匹配,应该在最后一次迭代完成后使用 for 循环返回 4 ?

static int linearSearch(int arr[], int n) 
    { 
        int i; 
        for(i = 0; i < n; i++) 
        { 
            if(arr[i] == i) 
                return i; 
        } 
        
        /* If no fixed point present  
           then return -1 */
        return -1; 
    } 
    //main function 

【问题讨论】:

  • 这里的定点是什么意思?你怎么称呼这个方法?您正在将索引与数组元素进行比较,因此当它们匹配时,它将返回该索引。以您给出的示例为例,对于i = 0,比较arr[0] == 0 将为真,它将返回i,即0

标签: java arrays algorithm linear-search


【解决方案1】:

这是因为在您的if 中您立即调用return,并且您的方法应该返回一个int。如果你想收集所有的固定点,你可以像这样修改你的方法:

static List<Integer> linearSearch(int arr[], int n)
{
    List<Integer> fixedPoints = new ArrayList<>();
    for(int i = 0; i < n; i++)
    {
        if(arr[i] == i)
            fixedPoints.add(i);
    }

    return fixedPoints;
}

【讨论】:

  • 您好,如果我只想返回数组中的最后一个匹配值怎么办?
  • 然后和你的代码一样,只是改变循环方向:for(int i = n - 1; i &gt;= 0; i--)
【解决方案2】:

这将返回 4,因为它有一个更新的索引,每个 i 与它在数组中的值匹配。

static int linearSearch(int arr[], int n) 
    { 
        int i,index = -1; 
        for(i = 0; i < n; i++) 
        { 
            if(arr[i] == i) 
                index = i; 
        } 
        
        /* If no fixed point present  
           then return -1 */
        return index; 
    } 
    //main function 

【讨论】:

    【解决方案3】:

    问:有人可以在下面解释为什么使用这种方法 只返回数组中的第一个匹配值?

    方法在到达 return 语句时返回到调用它的代码。

    来自doc

    从方法返回值

    方法返回到调用它时的代码

    • 完成方法中的所有语句,
    • 到达返回语句,或
    • 抛出异常,

    以先发生者为准。

    语句if(arr[i] == i) for 循环的第一步返回true:

    i=0
    arr[0]=0
    

    然后return i; 行被执行。

    Q:数组中的每个值都匹配它的索引 4,应该使用 最后一次迭代完成后for循环返回4?

    在这种情况下,最后一次迭代是for 循环的第一次迭代。它仅适用于i=0i 的值永远不会达到 4。

    【讨论】:

      猜你喜欢
      • 2020-11-28
      • 2015-11-29
      • 1970-01-01
      • 2018-12-01
      • 1970-01-01
      • 2018-01-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多