js给定一个先增后降的数组,找出其中的最大值
时间: 2024-05-07 15:19:35 浏览: 7
可以使用二分查找来解决这个问题。具体步骤如下:
1. 找到数组的中间元素
2. 如果中间元素比它前面的元素大且比它后面的元素大,则中间元素就是最大值
3. 如果中间元素比它前面的元素小,则最大值一定在中间元素的左边,此时在左半边数组中继续查找
4. 如果中间元素比它后面的元素小,则最大值一定在中间元素的右边,此时在右半边数组中继续查找
下面是具体的实现代码:
```javascript
function findMax(arr) {
let left = 0;
let right = arr.length - 1;
while (left < right) {
let mid = Math.floor((left + right) / 2);
if (arr[mid] > arr[mid - 1] && arr[mid] > arr[mid + 1]) {
return arr[mid];
} else if (arr[mid] < arr[mid - 1]) {
right = mid - 1;
} else {
left = mid + 1;
}
}
// 如果left和right相等,则最大值就是该位置的元素
return arr[left];
}
// 示例
let arr = [1, 3, 5, 7, 9, 8, 6, 4, 2];
console.log(findMax(arr)); // 输出 9
```
相关问题
给定一个整型数组,找出其中的最大值和最小值。scala
可以使用 Scala 中的内置函数 `max` 和 `min` 来找到数组中的最大值和最小值。示例如下:
```scala
val arr = Array(1, 2, 3, 4, 5)
val maxVal = arr.max
val minVal = arr.min
println(s"Max value: $maxVal, Min value: $minVal")
```
输出结果为:
```
Max value: 5, Min value: 1
```
其中,`max` 函数返回数组中的最大值,`min` 函数返回数组中的最小值。
(编程题)给定一个整型数组,找出其中的最大值和最小值
以下是一个Scala实现的例子:
```scala
val arr = Array(1, 3, 5, 2, 4)
val max = arr.reduceLeft(_ max _)
val min = arr.reduceLeft(_ min _)
println(s"max: $max, min: $min")
```
输出结果为:
```
max: 5, min: 1
```
以上代码中,我们使用了Scala数组的`reduceLeft()`方法来求出数组中的最大值和最小值。`reduceLeft()`方法接受一个函数作为参数,这个函数用于将数组中的元素两两比较,取出其中的最大值或最小值。在本例中,我们使用了`max`和`min`函数来实现这个比较操作。
另外,如果数组为空,以上代码会抛出异常。为了避免这种情况,可以使用`reduceOption()`方法来避免异常,例如:
```scala
val max = arr.reduceOption(_ max _).getOrElse(0)
val min = arr.reduceOption(_ min _).getOrElse(0)
```
这样,如果数组为空,`reduceOption()`方法会返回`None`,调用`getOrElse()`方法会返回默认值0。