C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++で回転ソート配列IIを検索


配列が昇順でソートされているとします。それは、事前に私たちに知られていないいくつかのピボットで回転します。たとえば、配列が[0,0,1,2,2,5,6]のような場合、これは[2,5,6,0,0,1,2]になる可能性があります。検索するターゲット値があります。それが配列で見つかった場合はtrueを返し、そうでない場合はfalseを返します。したがって、配列が[2,5,6,0,0,1,2]のようで、ターゲットが0の場合、出力は0になります

手順を見てみましょう-

  • 低:=0および高:=配列のサイズ

  • 低<高

    • 中:=低+(高-低)/ 2

    • nums [mid] =targetの場合、trueを返します

    • nums [low] =nums[mid]およびnums[high-1]=nums [mid]の場合、

      • 低値を1増やし、高値を1減らし、次の反復に進みます

    • nums [low] <=nums [mid]の場合、

      • target> =nums[low]およびtarget

    • それ以外の場合

      • target <=nums[high-1]およびtarget>nums[mid]の場合、low:=mid + 1、それ以外の場合、high:=mid

    • falseを返す

理解を深めるために、次の実装を見てみましょう-

class Solution(object):
   def search(self, nums, target):
      """
      :type nums: List[int]
      :type target: int
      :rtype: int
      """
      low = 0
      high = len(nums)
      while low<high:
         mid = low + (high-low)//2
         print(mid)
      if nums[mid] == target:
         return True
      if nums[low] == nums[mid] and nums[high-1] == nums[mid]:
         low +=1
         high -=1
         continue
      if nums[low]<=nums[mid]:
         if target >=nums[low] and target <nums[mid]:
            high = mid
         else:
            low = mid+1
      else:
         if target<=nums[high-1] and target>nums[mid]:
            low = mid+1
      else:
         high = mid
   return False

入力

[2,5,6,0,0,1,2]
0

出力

true

  1. C++で最も近い二分探索木値II

    二分探索木とターゲット値があるとします。そのBSTで、ターゲットに最も近いk個の値を見つける必要があります。目標値は浮動小数点数であることに注意する必要があります。 kは常に有効であり、k≤合計ノードであると想定できます。 したがって、入力が次のような場合 target =3.714286、k =2の場合、出力は[4,3]になります。 これを解決するには、次の手順に従います- 関数pushSmaller()を定義します。これにより、ノード、スタックst、およびターゲットが取得されます。 ノードが存在しない場合は、-を実行します ノードの値が<ターゲットの場合、-

  2. Pythonで回転した並べ替えられた配列を検索する

    配列が昇順で並べ替えられており、事前に不明なピボットで回転していると考えてください。たとえば、[0,1,2,4,5,6,7]は[4,5,6,7,0,1,2]になります。検索にターゲット値を指定しました。配列で取得できる場合はそのインデックスを返し、そうでない場合は-1を返します。配列に重複が存在しないと想定できます。したがって、配列が[4,5,6,7,0,1,2]のような場合、この要素のインデックスはインデックス4に存在するため、出力は4になります。 これを解決するには、次の手順に従います- 低:=0および高:=配列の長さ 低い<高い midをmidとして見つける:=low +(high-