Je résolvez une question dans laquelle je dois écrire une fonction qui trouve la somme maximale et minimale de quatre entiers dans un tableau qui lui est transmis puis l'affiche.
Voici mon code: P>
void miniMaxSum(vector<int> arr) { int minsum=0; int maxsum=0; int l1,l2,l3,l4; int s1,s2,s3,s4; l1=arr[0]; s1=arr[0]; for(int i=1;i<arr.size();++i) { if(l1<arr[i]) l1=arr[i]; if(s1>arr[i]) s1=arr[i]; } l2=arr[0]; s2=arr[0]; for(int i=1;i<arr.size();++i) { if(l2<arr[i]&&arr[i]!=l1) l2=arr[i]; if(s2>arr[i]&&arr[i]!=s1) s2=arr[i]; } l3=arr[0]; s3=arr[0]; for(int i=1;i<arr.size();++i) { if(l3<arr[i]&&arr[i]!=l2&&arr[i]!=l1) l3=arr[i]; if(s3>arr[i]&&arr[i]!=s2&&arr[i]!=s1) s3=arr[i]; } l4=arr[0]; s4=arr[0]; for(int i=1;i<arr.size();++i) { if(l4<arr[i]&&arr[i]!=l2&&arr[i]!=l1&&arr[i]!=l3) l4=arr[i]; if(s4>arr[i]&&arr[i]!=s3&&arr[i]!=s2&&arr[i]!=s1) s4=arr[i]; } minsum=s1+s2+s3+s4; maxsum=l1+l2+l3+l4; cout<<minsum<<" "<<maxsum; }
4 Réponses :
void miniMaxSum(vector<int> arr) { sort(arr.begin(), arr.end()); int sumMin = 0, sumMax = 0, len = arr.size() - 1; for(int i = 0; i < 4; i++){ sumMin += arr[i]; sumMax += arr[len - i]; } cout<<"minimum sum: "<<sumMin<<endl; cout<<"maximum sum: "<<sumMax<<endl; }
Si vous envisagez de complexité, alors que Daniel mentionné, vous pouvez le faire en utilisant Voici le segment de code p> O (n journal n) code> mais vous pouvez le faire en utilisant
O (n) code> où
N code> est la longueur de la matrice.
En supposant que vous puissiez utiliser la bibliothèque standard: affiché pour fonctionner sur https://repl.it/repls/entiretornbotany p> p>
Trier la matrice à l'aide de C ++ STL Trier (tableau, Array + N), puis choisissez N numéro de départ ou à partir de la fin. Serait complété dans Big Oh de Nlogn P>
Cet algorithme va échouer s'il y a des éléments répétés au minimum ou au maximum.
@Cigien Il échoue également à des tableaux sans répétition.
pour l'entrée 1,2,3,4,5 Le résultat devrait être de 10 14, mais il donne 4 14, pourquoi @Cigien Pls dit
OK, pourquoi ne fournissez-vous pas de cas de test qui échoue et montrez la sortie attendue et la production réelle.
@Cigien YES BRO pour l'entrée 1,2,3,4,5 La sortie doit être de 10 14, mais ma sortie est de 4 14
Parce que vous initialisez
s code> s sur
arr [0] code>, qui est le plus petit élément, et seule la mise à jour lorsque vous trouverez un élément plus grand, ce qui est impossible. Donc, tous vos
s code> sont 1.
et pour l'entrée 7 69 2 221 8974, la sortie est de 23 9271 alors qu'elle devrait être 299 9271
@Cigien Pouvez-vous suggérer une autre méthode pour ce faire?
Comme je l'ai dit ci-dessus, triez le tableau et regardez le premier et les 4 derniers éléments. Vous pouvez utiliser
std :: trier code> pour cela. Vous pouvez jeter un coup d'œil sur
std :: NTH_Element code> pour être plus efficace.
@Cigien Oh merci, c'est une bonne idée, je vais sûrement l'essayer ... merci beaucoup
Laissez-nous Continuer cette discussion dans le chat .