1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

個人的アルゴリズムの勉強の部屋

Last updated at Posted at 2023-04-29

アルゴリズムを書くトレーニングを何ヶ月かにやってるのですが
一人で黙々とやるのが続かないので記事にしてなんとかモチベーションを
保つという目的で書いていきます。

問題:配列の中の二つ数字の組み合わせの和で、指定した数字に一致した場合、True。一致しなかった場合、Falseになるような関数を作る。

input

from typing import List
>> array:List[int],dist:int

output

もしarrayの中の二つの組み合わせを使用してdistになるものがあればTrue。それ以外False

一般的な解き方:for文で探索するやつ

from typing import List
def findpair(arr:List[int], dist:int) -> bool:
    for i in range(len(arr)):
        for j in range(i+1 ,len(arr)):
            if arr[i] + arr[j] == dist:
                return True
    return False

インテリジェントな解き方

from typing import List

def findpair(arr:List[int], dist:int) -> bool:
    arr.sort()
    left = 0
    right = len(arr)-1
    while left < right:
        if arr[left] + arr[right] == dist:
            return True
        elif arr[left] + arr[right] > dist:
            return right -=1
        else:
            return left +=1
    return False

ハッシュテーブルを使用した解き方

from typing import List

def findpair(arr:List[int], dist: int) -> bool:
    hash = {}
    for num in arr:
        if hash[dist-num]:
            return True:
        else:
            hashed[num] = True
    return False
1
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?