Well, you can just call it twice:
int max3 = Math.Max(x, Math.Max(y, z));
If you find yourself doing this a lot, you could always write your own helper method… I would be happy enough seeing this in my code base once, but not regularly.
(Note that this is likely to be more efficient than Andrew’s LINQ-based answer – but obviously the more elements you have the more appealing the LINQ approach is.)
EDIT: A “best of both worlds” approach might be to have a custom set of methods either way:
public static class MoreMath
{
// This method only exists for consistency, so you can *always* call
// MoreMath.Max instead of alternating between MoreMath.Max and Math.Max
// depending on your argument count.
public static int Max(int x, int y)
{
return Math.Max(x, y);
}
public static int Max(int x, int y, int z)
{
// Or inline it as x < y ? (y < z ? z : y) : (x < z ? z : x);
// Time it before micro-optimizing though!
return Math.Max(x, Math.Max(y, z));
}
public static int Max(int w, int x, int y, int z)
{
return Math.Max(w, Math.Max(x, Math.Max(y, z)));
}
public static int Max(params int[] values)
{
return Enumerable.Max(values);
}
}
That way you can write MoreMath.Max(1, 2, 3)
or MoreMath.Max(1, 2, 3, 4)
without the overhead of array creation, but still write MoreMath.Max(1, 2, 3, 4, 5, 6)
for nice readable and consistent code when you don’t mind the overhead.
I personally find that more readable than the explicit array creation of the LINQ approach.
using
System;
class
GFG {
static
void
Main()
{
byte
b1 = 10, b2 = 15;
decimal
d1 = 1000M, d2 = 1568M;
double
db1 = 15.896745, db2 = 8.62644598;
short
sh1 = -96, sh2 = 24;
int
i1 = 26745236, i2 = 36725413;
long
l1 = -2534234234234, l2 = -745837587527423;
sbyte
sb1 = 52, sb2 = 120;
float
f1 = 8.0f, f2 = 78.78f;
ushort
us1 = 5346, us2 = 6437;
uint
un1 = 432344637, un2 = 64762738;
ulong
ul1 = 34234234, ul2 = 673286478326;
Console.WriteLine(
"Math.Max Method (Byte, Byte) = "
+ Math.Max(b1, b2));
Console.WriteLine(
"Math.Max Method (Decimal, Decimal) = "
+ Math.Max(d1, d2));
Console.WriteLine(
"Math.Max Method (Double, Double) = "
+ Math.Max(db1, db2));
Console.WriteLine(
"Math.Max Method (Int16, Int16) = "
+ Math.Max(sh1, sh2));
Console.WriteLine(
"Math.Max Method (Int32, Int32) = "
+ Math.Max(i1, i2));
Console.WriteLine(
"Math.Max Method (Int64, lInt64) = "
+ Math.Max(l1, l2));
Console.WriteLine(
"Math.Max Method (SByte, SByte) = "
+ Math.Max(sb1, sb2));
Console.WriteLine(
"Math.Max Method (Single, Single) = "
+ Math.Max(f1, f2));
Console.WriteLine(
"Math.Max Method (UInt16, UInt16) = "
+ Math.Max(us1, us2));
Console.WriteLine(
"Math.Max Method (UInt32, UInt32) = "
+ Math.Max(un1, un2));
Console.WriteLine(
"Math.Max Method (UInt64, UInt64) = "
+ Math.Max(ul1, ul2));
}
}
Improve Article
Save Article
Like Article
Improve Article
Save Article
Like Article
Given two integers A and B, the task is to find the maximum of two numbers using Bitwise Operators.
Examples:
Input: A = 40, B = 54
Output: 54Input: A = -1, B = -10
Output: -1
Approach: The idea is to use the Bitwise Operator as well as the Right Shift Operator to find the greatest number between two distinct numbers without using any conditional statements( if … ) and Ternary Operator(?: ). Below are the steps:
- Find the maximum value on the basis of the below expression:
z = A – B
i = (z >> 31) & 1
max = a – (i*z)
- Subtract two numbers and store it in another variable z.
- To get the sign of the number obtained after subtraction, apply Right Shift to the variable z and store it in another variable i and then perform Bitwise AND operation on the variable i with 1 to get values in 1 or 0.
- Perform the following expression to get the largest value among the two given numbers as max = (a – (i * z)).
Illustration:
A = 40, B = 54
z = (A – B) = 40 – 54 = -14
i = -1 & 1 = 1
max = a – (i * z) = (40 – (1 * -14)) = 54
Below is the implementation of the above approach:
C++
#include <iostream>
using
namespace
std;
int
findMax(
int
a,
int
b)
{
int
z, i, max;
z = a - b;
i = (z >> 31) & 1;
max = a - (i * z);
return
max;
}
int
main()
{
int
A = 40, B = 54;
cout << findMax(A, B);
return
0;
}
C
#include <stdio.h>
int
findMax(
int
a,
int
b)
{
int
z, i, max;
z = a - b;
i = (z >> 31) & 1;
max = a - (i * z);
return
max;
}
int
main()
{
int
A = 40, B = 54;
printf
(
"%d"
, findMax(A, B));
return
0;
}
Java
import
java.io.*;
class
GFG {
public
static
int
findMax(
int
a,
int
b)
{
int
z, i, max;
z = a - b;
i = (z >>
31
) &
1
;
max = a - (i * z);
return
max;
}
public
static
void
main (String[] args)
{
int
A =
40
, B =
54
;
System.out.println(findMax(A, B));
}
}
Python3
def
findmaxx(a, b):
z
=
a
-
b
i
=
(z >>
31
) &
1
maxx
=
a
-
(i
*
z)
return
maxx
A
=
40
B
=
54
print
(findmaxx(A, B))
Javascript
<script>
function
findMax(a, b)
{
var
z, i, max;
z = a - b;
i = (z >> 31) & 1;
max = a - (i * z);
return
max;
}
var
A = 40, B = 54;
document.write(findMax(A, B));
</script>
Time Complexity: O(1)
Auxiliary Space: O(1)
Last Updated :
17 Jan, 2022
Like Article
Save Article
В этом посте будет обсуждаться, как найти минимальное и максимальное число из массива в C#.
1. Использование Linq
Простое решение для поиска минимального и максимального значения в последовательности значений — использование Enumerable.Min
а также Enumerable.Max
методы из System.Linq
пространство имен.
using System; using System.Linq; public class Example { public static void Main() { int[] arr = { 8, 3, 5, –1, 2 }; Console.WriteLine(“Minimum number is “ + arr.Min()); Console.WriteLine(“Maximum number is “ + arr.Max()); } } |
Скачать Выполнить код
результат:
Minimum number is -1
Maximum number is 8
2. Использование Array.Sort()
Метод
Другой вероятный, но менее рекомендуемый способ найти минимум/максимум массива — отсортировать массив в порядке возрастания. Тогда первый и последний элементы отсортированного массива будут минимальным и максимальным элементом соответственно.
using System; public class Example { public static void Main() { int[] arr = { 8, 3, 5, –1, 2 }; Array.Sort(arr); if (arr.Length > 0) { Console.WriteLine(“Minimum number is “ + arr[0]); Console.WriteLine(“Maximum number is “ + arr[arr.Length – 1]); } } } |
Скачать Выполнить код
результат:
Minimum number is -1
Maximum number is 8
3. Использование пользовательской процедуры
Наконец, мы можем написать собственную процедуру для нахождения минимального и максимального числа массива. Идея состоит в том, чтобы пройтись по массиву и отслеживать минимальное или максимальное значение, найденное на данный момент. Вот как будет выглядеть код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
using System; public class Example { public static int findMin(int[] arr) { if (arr.Length == 0) { throw new Exception(“Array is empty”); } int min = int.MaxValue; foreach (var i in arr) { if (i < min) { min= i; } } return min; } public static int findMax(int[] arr) { if (arr.Length == 0) { throw new Exception(“Array is empty”); } int max = int.MinValue; foreach (var i in arr) { if (i > max) { max = i; } } return max; } public static void Main() { int[] arr = { 8, 3, 5, –1, 2 }; Console.WriteLine(“Minimum number is “ + findMin(arr)); Console.WriteLine(“Maximum number is “ + findMax(arr)); } } |
Скачать Выполнить код
результат:
Minimum number is -1
Maximum number is 8
Вот и все, что касается нахождения минимального и максимального числа из массива в C#.
Спасибо за чтение.
Пожалуйста, используйте наш онлайн-компилятор размещать код в комментариях, используя C, C++, Java, Python, JavaScript, C#, PHP и многие другие популярные языки программирования.
Как мы? Порекомендуйте нас своим друзьям и помогите нам расти. Удачного кодирования 🙂