怎么在 OJ 上用 JavaScript 写算法题,赶快学起来~

总结一下在牛客或者leetcode中编写算法,使用JavaScript 语言如何编写的问题:
我发现CSDN上很多类似的,但是看了一下,有些是有问题的,感觉照搬过来没有实验过,不实验怎么出真知呢

分析

编写算法题,要自己测试的话,有几种方式都可以:

  • 1:提前将要测试的数据写在变量里,不用读取I/O。
  • 2:在控制台里输入 要测试的数据,需要用到I/O
  • 3:使用自己的对数器来测试,不用读取I/O。

第一种方式 可用于少量自测,用于测试 简单的算法或者测试输入简单的算法。
第二种方式 也可用户少量自测,或者在牛客或者leetcode里提交代码,进行OJ测试,表现自己的“账号实力”。
第三种方式 自己调控测试的量,也不需要I/O,推荐。

都知道 JavaScript 脚本语言,跑在浏览器里,没有获取I/O的API,无法直接读取用户输入。
但是 nodejs 有:readline模块, V8引擎也有readLine

输入

输入情况分为以下几种:

  • 1:输入一行
  • 2:N+1行输入

以下是对需要 OJ 测试的代码的规范:

JavaScript(v8)

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

    print('res')
})();

JavaScript(Node)

1、单行输入,然后算法实现,然后输出。

// 使用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);
});
JavaScript(node)
JavaScript(node)

有些朋友类似的文章里,以上的代码是不对的,只有满足条件了之后才应该输出后退出。
3、第一行输入值N作为第二行的以空格隔开的元素个数

//前面的不变
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);
    }
    
});

另外,其他语言的 OJ 格式我列出几个,有不对的地方请指出:

Java 编码规范:

/* new Scanner(System.in) 获取输入
  System.out.println() 输出
*/
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String str1 = scanner.nextLine();
        String str2 = scanner.nextLine();
        scanner.close();
        // 编码
        System.out.println('xx');
    }
}

C 编码规范

 /* gets() 获取输入
  * printf() 输出
 */ 
#include <stdio.h>
#include <string.h>
#define N 50
int main() {
    char s1[N],s2[N];
    gets(s1);
    gets(s2);
     int res = 0;
    // 编码
    printf("%d\n", res)
    return 0;
}

C++ 编码规范

/* getline(cin, a); 读取输入
    cout<<res<<endl; 输出
*/
#include<iostream>
using namespace std;
int main() {
    string a,b;
    getline(cin,a);
    getline(cin,b);
    int res = 0;
    // 编码
    cout<<res<<endl;
    return 0;
}

Python 编码规范

'''
input() 读取输入
print() 输出
'''
def solution:
    a=input()
    b=input()
    # 编码
    print('xx')
solution()
有问题反馈加微信:mue233 私聊送一本电子书,绝对受益良多! 微信公众号:慕意,分享创业、使用的软件和教程~
知识星球精选推荐 » 怎么在 OJ 上用 JavaScript 写算法题,赶快学起来~