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

C++でリスト値を等しくする


numsという整数のリストがあるとします。ここで、リスト内の整数のサブセットを選択し、それらすべてを1つインクリメントする操作を想定します。リスト内のすべての値を互いに等しくするために必要な操作の最小数を見つける必要があります。

したがって、入力が[1,3,5]の場合、出力は4になります。

これを解決するには、次の手順に従います-

  • numsのサイズが1と同じ場合、-

    • 0を返す

  • ret:=0

  • maxVal:=-inf

  • minVal:=inf

  • 初期化i:=0の場合、i

    • maxVal:=maxValとnums[i]

      の最大値
    • minVal:=minValとnumsの最小値[i]

  • maxValを返す-minVal

理解を深めるために、次の実装を見てみましょう-

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   int solve(vector<int> &nums) {
      if (nums.size() == 1)
      return 0;
      int ret = 0;
      int maxVal = INT_MIN;
      int minVal = INT_MAX;
      for (int i = 0; i < nums.size(); i++) {
         maxVal = max(maxVal, nums[i]);
         minVal = min(minVal, nums[i]);
      }
      return maxVal - minVal;
   }
};
main() {
   Solution ob;
   vector<int> v = {1,3,5};
   cout << (ob.solve(v));
}

入力

{1,3,5}

出力

4

  1. C++でのリンクリストのフラット化

    この問題では、右と下の2つのポインタノードで構成されるリンクリストが表示されます。 右ノード はメインのリンクリストポインタです。 ダウンノード そのノードで始まるセカンダリリンクリスト用です。 リンクリストはすべて並べ替えられています。 私たちのタスクは、リンクリストをフラット化するプログラムを作成することであり、結果のリスト自体がソートされたリストになります。 問題を理解するために例を見てみましょう 入力 出力 1-> 9-> 8 -> 4 -> 6-> 7-> 2-> 3-> 5 ソリューションアプロー

  2. C++での等しいツリーパーティション

    n個のノードを持つ二分木があるとすると、元のツリーの1つのエッジを削除した後、値の合計が等しい2つのツリーにツリーを分割できるかどうかを確認するタスクがあります。 したがって、入力が次のような場合 そうすれば、出力は真になります。 これを解決するには、次の手順に従います- 1つのスタックstを定義する 関数solve()を定義します。これはノードを取ります ノードがnullの場合、- 0を返す leftSum:=solve(ノードの左側) rightSum:=solve(ノードの権利) curr:=val + leftSum+rig