この質問では、サイズ 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 サイトの他の関連記事を参照してください。