用 C++ 構建給定陣列所需的字尾增量/減量操作次數


給定一個包含正整數的目標陣列 arr[]。目標是用一個初始陣列(所有元素都為 0)構建目標陣列 arr[]。可以在一個所有元素都為 0 的空陣列上應用的操作是字尾增量/減量操作。

如果我們選擇任何索引 i,則在後綴增量操作的情況下,我們將從索引 i 到最後一個索引的所有元素加 1。

在後綴減量操作的情況下,我們將從索引 i 到最後一個索引的所有元素減 1。

讓我們透過示例來理解

輸入 − arr[]= { 1,2,3 }

輸出 − 構建給定陣列所需的字尾增量/減量操作次數為 3

解釋 

Starting from { 0, 0, 0 }
Choose index 0, applying suffix increment { 1, 1, 1 }
Choose index 1, applying suffix increment { 1, 2, 2 }
Choose index 2, applying suffix increment { 1, 2, 3 }
Total operations =3

輸入 − arr[]= { 1, 4, 5, 3 }

輸出 − 構建給定陣列所需的字尾增量/減量操作次數為 7

解釋 

Starting from { 0, 0, 0, 0 }
Choose index 0, applying suffix increment { 1, 1, 1, 1 }
Choose index 1, applying suffix increment { 1, 2, 2, 2 }
Choose index 1, applying suffix increment { 1, 3, 3, 3 }
Choose index 1, applying suffix increment { 1, 4, 4, 4 }
Choose index 2, applying suffix increment { 1, 4, 5, 5 }
Choose index 3, applying suffix decrement { 1, 4, 5, 4 }
Choose index 3, applying suffix decrement { 1, 4, 5, 3 }
Total operations = 7

下面程式中使用的方案如下

如果我們將初始陣列作為 B[ ]。要使第一個元素 B[0] 等於 arr[0]。我們將需要 arr[0] 次後綴增量操作。在此之後,所有 B[0]=B[1]....=B[n-1]=arr[0] 將相等。

要使第二個元素 B[1] 等於 arr[1],我們將需要 | arr[1]-arr[0] | 次操作。(增量或減量)。

因此,要使 B[i] 等於 arr[i],我們將需要 | arr[i]- arr[i-1] | 次操作。

操作的總數將為 | arr[0] | + | arr[1]-arr[0] | + …. + | arr[n-1]-arr[n-2] |。

  • 將目標陣列作為 arr[]。

  • 函式 incr_decr_op(int arr[], int size) 獲取陣列及其長度,並返回構建給定陣列所需的字尾增量/減量操作的次數

  • 將初始計數設為 0。

  • 使用 for 迴圈遍歷陣列 arr[]

  • 對於索引 0,將 arr[i] 加到計數中。

  • 對於其他索引,將 abs( arr[i]-arr[i-1] ) 加到計數中。

  • 在 for 迴圈結束時,返回計數作為結果。

示例

 即時演示

#include <bits/stdc++.h>
using namespace std;
int incr_decr_op(int arr[], int size){
   int count = 0;
   for (int i = 0; i < size; i++){
      if (i > 0){
         count += abs(arr[i] - arr[i - 1]);
      }
      else{
         count = count + abs(arr[i]);
      }
   }
   return count;
}
int main(){
   int arr[] = { 3, 3, 1, 2, 2 };
   int size = sizeof(arr) / sizeof(arr[0]);
   cout<<"Count of suffix increment/decrement operations to construct a given array are: "<<incr_decr_op(arr, size) << endl;
}

輸出

如果我們執行以上程式碼,它將生成以下輸出:

Count of suffix increment/decrement operations to construct a given array are: 6

更新於: 2020-12-03

117 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告