寻找两个数字之间的最小距离

问题定义

给定一个未排序的数组 arr[] 以及两个数字 xy,我们需要在 arr[] 中找出 xy 之间的最小距离。数组中可能包含重复项。我们可以假设 xy 是不同的,并且都存在于 arr[] 中。

示例:

> 输入: arr[] = {1, 2}, x = 1, y = 2

> 输出: Minimum distance between 1 and 2 is 1.

> 解释: 1 位于索引 0,2 位于索引 1,所以距离为 1

>

>

>

> 输入: arr[] = {3, 4, 5}, x = 3, y = 5

> 输出: Minimum distance between 3 and 5 is 2.

> 解释: 3 位于索引 0,5 位于索引 2,所以距离为 2

>

>

>

> 输入: arr[] = {3, 5, 4, 2, 6, 5, 6, 6, 5, 4, 8, 3}, x = 3, y = 6

> 输出: Minimum distance between 3 and 6 is 4.

> 解释: 3 位于索引 0,6 位于索引 4,所以距离为 4

>

>

>

> 输入: arr[] = {2, 5, 3, 5, 4, 4, 2, 3}, x = 3, y = 2

> 输出: Minimum distance between 3 and 2 is 1.

> 解释: 3 位于索引 7,2 位于索引 6,所以距离为 1

方法 1:

> 任务是找到两个给定数字之间的距离。我们可以使用嵌套循环来找到任意两个元素之间的距离。外层循环用于选择第一个元素,内层循环用于遍历数组以搜索另一个元素,并计算它们之间的最小距离。

让我们按照以下步骤来实现上述思路:

  • 创建一个变量 m = INT_MAX
  • 运行一个嵌套循环,外层循环从头到尾运行(循环计数器 i),内层循环从 i+1 到末尾运行(循环计数器 j)。
  • 如果第 i 个元素是 x 且第 j 个元素是 y,或者反之,则更新 m 为 m = min(m,j-i)
  • 打印 m 的值作为最小距离

以下是上述方法的实现:

C++


CODEBLOCK_eb4332f2

C


CODEBLOCK_59ff5cef

Java


// Java Program to Find the minimum

// distance between two numbers

import java.io.*;

class MinimumDistance {

int minDist(int arr[], int n, int x, int y)

{

int i, j;

int mindist = Integer.MAXVALUE;

for (i = 0; i < n; i++) {

for (j = i + 1; j < n; j++) {

if ((x == arr[i] && y == arr[j]

|| y == arr[i] && x == arr[j])

&& min_dist > Math.abs(i – j))

min_dist = Math.abs(i – j);

}

}

if (min_dist > n) {

return -1;

}

return min_dist;

}

public static void main(String[] args)

{

MinimumDistance min = new MinimumDistance();

int arr[] = { 3, 5, 4, 2, 6, 5, 6, 6, 5, 4, 8, 3 };

int n = arr.length;

int x = 0;

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。如需转载,请注明文章出处豆丁博客和来源网址。https://shluqu.cn/48877.html
点赞
0.00 平均评分 (0% 分数) - 0