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

C ++を使用して、配列から最後に削除された要素の位置を見つけます


この問題では、サイズNと整数値Mの配列arr []が与えられます。私たちのタスクは、配列から最後に削除された要素の位置を見つけることです。 。

配列からの値の削除は、操作-

に基づいています。
  • 配列arr[i]の要素の場合。 arr [i]> Mの場合、値をポップし、arr[i]--Mを配列の最後にプッシュします。それ以外の場合は、アレイから削除します。

配列が要素で構成されるまで操作を実行します。

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

入力

arr[] = {5, 4, 8}, M = 3

出力

3

説明

Removing values using operations,
{5, 4, 8} -> {4, 8, 2} -> {8, 1, 2} -> {1, 2, 5} -> {2, 5} -> {5} -> {2} ->
empty array.
The last value removed is 8, position is 3.

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

この問題の簡単な解決策は、最後に削除される各値の最大値が ceil(arr [i] / M)であるという事実を使用して、削除される最後の値を見つけることです。 。

最後に配列を終了する要素の位置を見つけるために、配列をトラバースし、最大値が ceil(arr [i] / M)の位置を格納します。 。

ソリューションの動作を説明するプログラム

#include <iostream>
using namespace std;
int findLastRemPos(int arr[], int n, int m){
   for (int i = 0; i < n; i++) {
      arr[i] = (arr[i] / m + (arr[i] % m != 0));
   }
   int lastRemPos = -1, largestVal = -1;
   for (int i = n - 1; i >= 0; i--) {
      if (largestVal < arr[i]) {
         largestVal = arr[i];
         lastRemPos = i;
      }
   }
   return lastRemPos + 1;
}
int main(){
   int arr[] = {5, 4, 8, 1};
   int n = sizeof(arr) / sizeof(arr[0]);
   int m = 3;
   cout<<"The position of last removed element in the array is "<<findLastRemPos(arr, n, m);
   return 0;
}

出力

The position of last removed element in the array is 3

  1. ラムダ式を使用して配列から最大の要素を見つけるC#プログラム

    配列を宣言する- int[] arr = { 10, 90, 20, 19, 99, 57 }; 配列から最大の要素を取得するには、ラムダ式でMax()メソッドを使用します- arr.Max()); これが完全なコードです- 例 using System; using System.Linq; class Demo {    static void Main() {       int[] arr = { 10, 90, 20, 19, 99, 57 };       Console.WriteLine(arr

  2. 配列内の最後に一致する要素を見つけるC#プログラム

    最後に一致する要素を見つけるには、Array.LastIndexOfメソッドを使用します。要素が整数配列に存在しない場合は-1を返します。 以下は配列です- int[] val = { 97, 45, 76, 21, 89, 45 }; ここで、要素45の最後のインデックスを検索する必要があるとします。そのためには、Array.LastIndexOf()メソッド-を使用します。 int res = Array.LastIndexOf(val, 45); 以下は例です- 例 using System; using System.Text; public class Demo {