任意の隣接する2つの要素の差の絶対値が1に等しい配列を与え、その配列に要素の値が複数回現れると、最初の位置を返すアルゴリズムを設計する.
1349 ワード
任意の隣接する2つの要素の差の絶対値が1に等しい配列を与え、その配列に要素の値が複数回現れると、最初の位置を返すアルゴリズムを設計する.
例えば,{4,5,6,5,6,7,8,9,10,9}元素9が2回出現し,最初に出現した位置は7である.
アルゴリズムに出会ったら、まず分析して、1、2つの例を挙げて、法則を見てみましょう.
考え方:検索が9、すなわちt=9であり、最初の配列からA[0]=4であれば、t-A[0]=5、第2のステップでt-A[5]=2を計算し、このとき5+2=7である.A[7]は目標数9である.
したがって、この方法は、A[0]から、目標値とA[t]の差に基づいて徐々に決定され、値が見つかるかインデックスが境界を越えるまでtの値を更新し続ける.
このアルゴリズムは,現在位置の数とルックアップ数の差を主に利用して,スパン探索を実現した.アルゴリズムの効率は配列を巡るアルゴリズムよりも高く,容易に実現できる.
例えば,{4,5,6,5,6,7,8,9,10,9}元素9が2回出現し,最初に出現した位置は7である.
アルゴリズムに出会ったら、まず分析して、1、2つの例を挙げて、法則を見てみましょう.
考え方:検索が9、すなわちt=9であり、最初の配列からA[0]=4であれば、t-A[0]=5、第2のステップでt-A[5]=2を計算し、このとき5+2=7である.A[7]は目標数9である.
したがって、この方法は、A[0]から、目標値とA[t]の差に基づいて徐々に決定され、値が見つかるかインデックスが境界を越えるまでtの値を更新し続ける.
このアルゴリズムは,現在位置の数とルックアップ数の差を主に利用して,スパン探索を実現した.アルゴリズムの効率は配列を巡るアルゴリズムよりも高く,容易に実現できる.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp2
{
class Program
{
static void Main(string[] args)
{
int[] A = { 4, 5, 6, 5, 6, 7, 8, 9, 10, 9 };
int[] B = { 12, 11, 12, 10, 11, 10, 9, 8, 9, 8 };
int result = Find(A, 9);
Console.WriteLine(result);
result = Find(B, 9);
Console.WriteLine(result);
Console.ReadKey();
}
static int Find(int[] array, int num)
{
int i = 0;
while (i < array.Length && i >= 0)
{
if (array[i] == num)
{
return i;
}
i += Math.Abs(num - array[i]);
}
return -1;
}
}
}