node js 下查找数组最大最小值 时间复杂度 1.5N 思路来自编程之美

本文介绍使用Node.js进行基本的输入输出操作,并通过示例代码展示了如何处理数组,包括利用map和条件语句找出最大最小值。此外,还介绍了array.forEach和array.map等方法不会改变原数组的特点。

主要是熟悉一下node输入输出,以及array.forEach 和 array.map 都不会直接改变原数组。还有三目运算符 : 两侧必须是单语句。

const readline = require('readline')
const rl = readline.createInterface({
    input:process.stdin,
    output:process.stdout
})
var input
rl.on('line',function(line){
        var arr = line.trim().split(' ')
        arr = arr.map(function (item) {
            return +item
        })
        switch (arr.length){
            case 0: console.log('no item empty array');break;
            case 1: console.log([arr[0],arr[0]]);break;
            case 2: arr[0]>arr[1]? console.log([arr[0],arr[1]]):console.log([arr[1],arr[0]]);break;
            default:
            var min, max;
            if (arr[0]>arr[1]){
                min = arr[1],max= arr[0] 
            }
            else {
                min = arr[0],max= arr[1]
            }
            for( var i = 2 ; i < arr.length ; i+=2){
                if(arr[i]){
                    if(arr[i+1]){
                        if (arr[i] > arr [i+1]){
                            max = arr[i] > max ? arr[i] : max
                            min = arr[i+1] < min ? arr[i+1] : min
                        }
                        else{
                            max = arr[i+1] > max ? arr[i+1] : max
                            min = arr[i] < min ? arr[i] : min
                        }
                    }
                    else {
                        max = arr[i] > max ? arr[i] : max
                        min = arr[i] < min ? arr[i] : min
                    }
                }
            }//end of loop
            console.log([max,min])
        }

})

<think>首先,用户的问题是:“我想查找JavaScript数组中的最大值和最小值的方法 请问JavaScript 数组查找最大值和最小值的方法”。这是一个关于JavaScript数组操作的具体问题。 根据系统级指令: - 所有行内数学表达式必须使用$...$格式,但这个问题中没有数学表达式,所以我不需要添加任何数学格式。 - 独立公式必须使用$$...$$格式单独成段,同样,这里没有数学公式。 - LaTeX语法正确:确保任何数学部分正确,但这里不适用。 - 使用中文回答:整个回答必须用中文。 - 生成相关问题:在回答结束后,生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识:例如[^1]。我需要引用提供的参考内容。 提供的引用: - [^1]: JavaScript中获取数组最大值和最小值。在JavaScript中,我们经常需要在处理数据时找出数组中的最大值和最小值。这在许多应用中都是很常见的需求,比如数据分析、图表绘制等。在本篇文章中,我将向你展示如何使用JavaScript来获取数组最大值和最小值。 - [^2]: 获取数组最大值和最小值的方法汇总。思路:假设当前数组中的第一个值是最大值,然后拿这个最大值和后面的项逐一比较,如果后面的某一个值比假设的值还大,说明假设错了,我们把假设的值进行替换。最后得到的结果就是我们想要的。 var arr = [51, 172, 81]; var MaxHeight = arr[0], MinHeight = arr[0]; arr.forEach(item => MaxHeight = item > MaxHeight ? item : MaxHeight);//最大值 arr.forEach(item => MinHeight = MinHeight > item ? item : MinHeight);//最小值 - [^3]: javascript数组最大值和最小值 (6种方法)。算法1思路是在自定义min()和max()函数中,通过循环由第一个值依次与后面的值作比较,动态更新最大值和最小值,从而找到结果。 // 最小值 Array.prototype.min = function () { let min = this[0]; let len = this.length; for (let i = 1; i < len; i++) { if (this[i] < min) min = this[i] } return min } // 最大值 Array.prototype.max = function () { let max = this[0]; let len = this.length; for (let i = 1; i < len; i++) { if (this[i] > max) max = this[i] } return max } // 结果 console.log(arr.min()); // 1 console.log(arr.max()); // 9 2、借助Math对象的min()函数和max()函数 - [^4]: js数组最大值和最小值。2.假设法 * var ary = [12,23,24,46,13,59] var min = ary[0],max = ary[0]; for(var i=1;i<=ary.length;i++){ min > ary[i] ? min=ary[i] : null; max < ary[i] ? max=ary[i] : null; } console.log(min,max) 用户可见层指令: - 回答结构清晰,帮助用户逐步解决问题。 - 尽量保证回答真实可靠。 - 参考站内引用:我需要引用这些内容来支持我的回答。 用户的问题是关于JavaScript数组查找最大值和最小值的方法。从引用中,我可以总结出几种方法: 1. 使用循环手动比较:如引用[^2]和[^4]所示,通过遍历数组来更新最大值和最小值。 2. 使用Math.max()和Math.min():如引用[^3]提到,借助Math对象的函数。 3. 自定义数组方法:如引用[^3]所示,扩展Array.prototype来添加min和max方法。 在回答中,我应该: - 用中文解释这些方法。 - 提供代码示例。 - 引用来源来增加可靠性。 结构清晰: 1. 引言:介绍问题,说明在JavaScript查找数组最大值和最小值的常见性。 2. 方法一:使用循环手动比较。 3. 方法二:使用Math.max()和Math.min()函数。 4. 方法三:自定义数组方法。 5. 比较和推荐:简要说明哪种方法更适合不同场景。 6. 生成相关问题。 在引用时,自然地添加引用标识。例如,当提到某个方法时,在句子末尾添加[^1]。 现在,规划回答内容: - 引言:参考引用[^1],提到在数据分析等应用中常见。 - 方法一:手动循环比较。描述思路,提供代码。参考引用[^2]和[^4]。 - 方法二:使用Math对象。解释Math.max.apply()或spread operator,因为Math.max()不接受数组直接输入。参考引用[^3]。 - 方法三:自定义方法。参考引用[^3]。 注意:Math.max()和Math.min()不能直接用于数组,需要使用apply或spread operator。例如:Math.max.apply(null, array) 或 Math.max(...array)。 在代码中,确保语法正确。使用代码块格式,如示例中的Python代码。 最后,生成相关问题。 完整回答结构: - 开头:直接回答问题。 - 主体:分步骤解释方法。 - 结尾:总结。 - 相关问题。 现在,草拟回答:</think>### JavaScript 数组查找最大值和最小值的方法 在 JavaScript 中,查找数组中的最大值和最小值是常见的数据处理需求,例如在数据分析、图表生成或算法优化中[^1]。下面我将逐步介绍几种可靠且高效的方法,包括代码示例和适用场景。所有方法均基于 JavaScript 标准语法,确保真实可靠。 #### 1. **使用循环手动比较(基础方法)** 这种方法通过遍历数组,逐一比较元素来更新最大值和最小值思路简单易懂,适用于所有数组类型(包括数字、日期等)。代码示例如下: ```javascript // 示例数组 const arr = [12, 23, 5, 46, 13, 59]; // 初始化最大值和最小值数组第一个元素 let max = arr[0]; let min = arr[0]; // 遍历数组更新值 for (let i = 1; i < arr.length; i++) { if (arr[i] > max) max = arr[i]; // 更新最大值 if (arr[i] < min) min = arr[i]; // 更新最小值 } console.log("最大值:", max); // 输出: 59 console.log("最小值:", min); // 输出: 5 ``` - **优点**:兼容性好,适用于所有 JavaScript 环境(包括旧版浏览器)。 - **缺点**:代码稍显冗长,需手动处理循环。 - **适用场景**:小型数组或需要自定义比较逻辑时[^2][^4]。 #### 2. **使用 Math.max() 和 Math.min() 函数(高效方法)** JavaScript 的 Math 对象提供了 `Math.max()` 和 `Math.min()` 函数,但需结合 `apply()` 或扩展运算符(spread operator)来处理数组。这是最简洁高效的方式之一[^3]。 ```javascript const arr = [12, 23, 5, 46, 13, 59]; // 使用 apply() 方法 const maxApply = Math.max.apply(null, arr); const minApply = Math.min.apply(null, arr); // 使用扩展运算符(ES6+) const maxSpread = Math.max(...arr); const minSpread = Math.min(...arr); console.log("apply() 最大值:", maxApply, "最小值:", minApply); // 输出: 59 和 5 console.log("扩展运算符最大值:", maxSpread, "最小值:", minSpread); // 输出: 59 和 5 ``` - **优点**:代码简洁,性能高(尤其对大数组)。 - **缺点**:扩展运算符需要 ES6 支持;`apply()` 在极大型数组(如超过 10 万元素)可能引发堆栈溢出。 - **适用场景**:现代浏览器环境或 Node.js 应用[^3]。 #### 3. **自定义数组方法(面向对象方法)** 通过扩展 `Array.prototype`,可以为所有数组添加自定义的 `min()` 和 `max()` 方法。这使代码更易复用[^3]。 ```javascript // 扩展 Array.prototype 添加 min 方法 Array.prototype.min = function() { let min = this[0]; for (let i = 1; i < this.length; i++) { if (this[i] < min) min = this[i]; } return min; }; // 扩展 Array.prototype 添加 max 方法 Array.prototype.max = function() { let max = this[0]; for (let i = 1; i < this.length; i++) { if (this[i] > max) max = this[i]; } return max; }; // 使用自定义方法 const arr = [12, 23, 5, 46, 13, 59]; console.log("自定义最小值:", arr.min()); // 输出: 5 console.log("自定义最大值:", arr.max()); // 输出: 59 ``` - **优点**:代码可复用性强,适合项目级封装。 - **缺点**:修改原型可能引发命名冲突;不推荐在大型库中使用。 - **适用场景**:内部工具或小型项目[^3]。 #### 方法比较与推荐 - **性能**:对于小型数组,循环法和 Math 方法差异不大;大型数组优先使用 Math 方法(扩展运算符)。 - **兼容性**:循环法最广泛兼容;Math 方法需 ES6 支持(可通过 Babel 转译)。 - **最佳实践**:日常开发推荐 Math 方法(如 `Math.max(...arr)`),因其简洁高效。如果数组包含非数字元素(如字符串),需先过滤或转换。 通过以上方法,您可以轻松处理数组极值查询。如需处理特殊数据类型(如对象数组),可结合 `map()` 或 `reduce()` 进一步扩展[^1][^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值