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> //