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

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


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

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

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

右ポインタはインデックス(n-1)から始まり、値がデクリメントされます。

トラバースされた合計が他よりも小さい場合、つまり、左ポインターの合計が右ポインターの合計よりも小さい場合、ポインターの値は増加します。それ以外の場合、右ポインターは減少します。そして、合計が更新されます。

問題を理解するために例を見てみましょう

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.

ソリューションアプローチ

この問題の簡単な解決策は、合計に基づいてleftPointerとrightPointerを移動することです。次に、leftPointerがrightPointerより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

  1. C++で特定の二分木の左葉ノードの合計を求めます

    ルートノードとその左の子と右の子を持つ二分木があるとしましょう。タスクは、親ノードに残されているツリーのリーフノードの合計を見つけることです。 例 入力-1: 出力: 15 説明: 与えられた入力二分木では、すべての左側の葉ノードの合計は9 + 4 + 2 =15です。したがって、出力は15です。 この問題を解決するためのアプローチ 二分木があり、その親に残されているすべてのリーフノードの合計を見つけることがタスクです。 この問題を解決するための再帰的なアプローチは、ルートノードの左側のノードが空かどうかを確認することです。空の場合は、左側のノードの合計を計算し、右

  2. C++でポインタ演算を使用した配列の合計

    これは、ポインタを使用して配列要素の合計を見つけるC++プログラムです。 アルゴリズム Begin    Initialize the array elements with values from user input.    Initialize s = 0    Loop for i = 0 to       s = s + *(ptr + i)    Print the sum value in variable s. End サンプルコード #include<iostr