C++での絶対値式の最大値
同じ長さの整数の配列が2つあるとすると、次の最大値を見つける必要があります。| arr1 [i] --arr1 [j] | + | arr2 [i]-arr2 [j] | + | i--j|。ここで、最大値はすべての0 <=i、j
これを解決するには、次の手順に従います-
-
配列vを取得するgetValというメソッドを定義します
-
maxVal:=-inf、minVal:=inf
-
0からvのサイズまでの範囲のiの場合
-
minVal:=v[i]とminValの最小値
-
maxVal:=v[i]とmaxValの最大値
-
-
maxVal – minVal
を返します -
メインの方法から、次のようにします
-
サイズ4の配列retを作成します
-
n:=arr1のサイズ
-
0からn–1の範囲のiの場合
-
arr1 [i] – arr2 [i]+iをret[0]
に挿入します -
arr1 [i] + arr2 [i]+iをret[1]
に挿入します -
arr1 [i] –arr2[i]-iをret[2]
に挿入します -
arr1 [i] +arr2[i]-iをret[3]
に挿入します
-
-
ans:=-inf
-
0から3の範囲のiの場合
-
ans:=ansとgetVal(ret [i])の最大値
-
-
ansを返す
理解を深めるために、次の実装を見てみましょう-
例
#include <bits/stdc++.h> using namespace std; class Solution { public: int getVal(vector <int>& v){ int maxVal = INT_MIN; int minVal = INT_MAX; for(int i = 0; i < v.size(); i++){ minVal = min(v[i], minVal); maxVal = max(v[i], maxVal); } return maxVal - minVal; } int maxAbsValExpr(vector<int>& arr1, vector<int>& arr2) { vector <int> ret[4]; int n = arr1.size(); for(int i = 0; i < n; i++){ ret[0].push_back(arr1[i] - arr2[i] + i); ret[1].push_back(arr1[i] + arr2[i] + i); ret[2].push_back(arr1[i] - arr2[i] - i); ret[3].push_back(arr1[i] + arr2[i] - i); } int ans = INT_MIN; for(int i = 0; i < 4; i++){ ans = max(ans, getVal(ret[i])); } return ans; } }; main(){ vector<int> v1 = {1,2,3,4}, v2 = {-1, 4, 5, 6}; Solution ob; cout << (ob.maxAbsValExpr(v1, v2)); }
入力
[1,2,3,4] [-1,4,5,6]
出力
13
-
代数式の最大値を見つけるためのC++プログラム
これは、任意の代数式の最大値を見つけるためのC ++プログラムです。(x1 + x2 + x3+。。。+xa)*(y1 + y2+。。。+yb)および(a + b )整数が与えられます。数値と残りのb数値のすべての可能な組み合わせを検討し、それらの値を計算して、そこから最大値を導き出すことができます。 アルゴリズム Begin function MaxValue() : Arguments: a[]=array which store the elements. x, y=integers.
-
C++でのラムダ式
C ++ STLには、std::for_eachのような便利なジェネリック関数が含まれています。残念ながら、特に適用したいファンクターが特定の機能に固有である場合は、使用するのが非常に面倒になる可能性があります。したがって、作成するこの関数は、その1つの場所で使用されている名前空間に含まれます。これに対する解決策は、無名関数を使用することです。 C++ではC++11にラムダ式が導入され、無名関数を作成できるようになりました。たとえば、 例 #include<iostream> #include<vector> #include <algorithm> //