首頁 > 後端開發 > C++ > 主體

在C++中,找到數組中可能移動後左指標的索引

WBOY
發布: 2023-09-09 13:09:02
轉載
467 人瀏覽過

在C++中,找到數組中可能移動後左指標的索引

在這個問題中,我們給了一個大小為N的陣列arr[]。我們的任務是在數組中可能的移動後找到左指標的索引。

我們有兩個指針,一個是左邊指針,另一個是右邊指針。

左指標從索引0開始,值遞增。

右指標從索引(n-1)開始,值遞減。

如果左指標的和小於右指標的和,則指標的值增加,否則指標的值會減少。並且和的值會更新。

讓我們透過一個例子來理解這個問題,

Input : arr[] = {5, 6, 3, 7, 9, 4}
Output : 2
登入後複製

#Explanation

的中文翻譯為:

Explanation

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中文網其他相關文章!

相關標籤:
來源:tutorialspoint.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!