前端面试中ACM模式

780 阅读2分钟

🎉 前言

本文主要介绍一些,最近面试中编写算法题时,对于ACM模式的使用,我们平时使用的JavaScript语言是没有这个输入和输出的处理的接口的,我们只能使用JavaScriptV8引擎带的I/O口的API,或者是使用Node的I/O口。以下我么你介绍一下在答题过程中怎么使用。

🎇JavaScript(v8)

JavaScript(v8)所所提供的是readline 和 print。

下图中a就是我们获取的数据,他是以字符串的形式存在的。a和b分别对应的是不同行的内容。它收集回来的是一个字符串,我们需要对数据进行处理,并且需要你自己构造自己所需要的数据结构,尤其是树结构和链表结构。编码的地方就是我们平时编写逻辑的地方。

/* readline() 读取一行输入,需要读取多少行写多少个
   print()  输出
*/
(function(){
    let a = readline().trim(),b = readline().trim()
     // 编码
 
    print('res')
})();
 

🎇JavaScript(Node)

1、单行输入,然后算法实现,然后输出。 Node的使用和我们在平时使用node一样,需要我们引入模块。它收集也是一个字符串的形式。

// 使用node.js的输入接口
const readline = require('readline');
// I/O
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});
// 监听控制台的输入
rl.on('line', function(line) { 
    var data = line.trim() //拿到控制台输入
     //编码
 
    console.log(result); //输出结果
    // 结束进程 
    process.exit(0);  
});
 

2、多行输入,第一行N作为接下来输入的行数。

const readline = require('readline');
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});
 
var N = -1; // 接收第一行数据
var rows = []; //用于存储接下来每行的输入
 
rl.on('line', function(line) {
    if (N < 0) {
        N = parseInt(line.trim()); //读取第一行
    } else {
        rows.push(line.trim()); //将每次输入的行数据存入
        if (N == rows.length) { 
            // 编码
            //这里表明已经收集完数据需要进行逻辑处理了
 
            console.log(N, rows); //输出
            // 触发'close'事件,结束进程。或者直接写:process.exit(0);
            rl.close() 
        }
    }
});
 
rl.on('close', function() {
    process.exit(0);
});

3、第一行输入值N作为第二行的以空格隔开的元素个数

const readline = require('readline');
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});
//前面的不变
let rows = []; //用于存储接下来每行的输入
rl.on('line', function(line) {
     
    rows.push(line.trim()); //将每次输入的行数据存入
    if (2 == rows.length) { // 行数在此
        let N = rows[0], list = rows[1].split(' '), res=[];
        // 编码
        
        console.log( res.join(' ')); //输出
        process.exit(0);
    }
    
});