ホームページ > バックエンド開発 > C++ > C++ では、移動後の配列内の左ポインタのインデックスを見つけます。

C++ では、移動後の配列内の左ポインタのインデックスを見つけます。

WBOY
リリース: 2023-09-09 13:09:02
転載
504 人が閲覧しました

C++ では、移動後の配列内の左ポインタのインデックスを見つけます。

この質問では、サイズ N の配列 arr[] が与えられています。私たちの仕事は、配列内で可能な移動の後に左ポインタのインデックスを見つけることです。

2 つのポインタがあり、1 つは左ポインタ、もう 1 つは右ポインタです。

左ポインタはインデックス 0 から始まり、値が増加します。

右ポインタはインデックス (n-1) から始まり、値が減少します。

左ポインタの合計が右ポインタの合計より小さい場合、ポインタの値は増加し、そうでない場合、ポインタの値は減少します。そしてsumの値が更新されます。

例を通してこの問題を理解しましょう。

Input : arr[] = {5, 6, 3, 7, 9, 4}
Output : 2
ログイン後にコピー

説明

の中国語訳は次のとおりです。

説明

leftPointer = 0 -> sum = 5, rightPointer = 5 -> sum = 4. Move rightPointer
leftPointer = 0 -> sum = 5, rightPointer = 4 -> sum = 13. Move leftPointer
leftPointer = 1 -> sum = 11, rightPointer = 4 -> sum = 13. Move leftPointer
leftPointer = 2 -> sum = 14, rightPointer = 4 -> sum = 13. Move rightPointer
leftPointer = 2 -> sum = 14, rightPointer = 3 -> sum = 20. Move rightPointer
Position of the left pointer is 2.
ログイン後にコピー

解決策

合計の大きさに応じて左右のポインタを移動して問題を解決します。次に、左ポインタが右ポインタより 1 大きいかどうかを確認します。

ソリューションがどのように機能するかを示すプログラム例

#include <iostream>
using namespace std;
int findIndexLeftPointer(int arr[], int n) {
   if(n == 1)
      return 0;
   int leftPointer = 0,rightPointer = n-1,leftPointerSum = arr[0], rightPointerSum = arr[n-1];
   while (rightPointer > leftPointer + 1) {
      if (leftPointerSum < rightPointerSum) {
         leftPointer++;
         leftPointerSum += arr[leftPointer];
      }
      else if (leftPointerSum > rightPointerSum) {
         rightPointer--;
         rightPointerSum += arr[rightPointer];
      }
      else {
         break;
      }
   }
   return leftPointer;
}
int main() {
   int arr[] = { 5, 6, 3, 7, 9, 4 };
   int n = sizeof(arr) / sizeof(arr[0]);
   cout<<"The index of left pointer after moving is "<<findIndexLeftPointer(arr, n);
   return 0;
}
ログイン後にコピー

出力

The index of left pointer after moving is 2
ログイン後にコピー

以上がC++ では、移動後の配列内の左ポインタのインデックスを見つけます。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:tutorialspoint.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート