• 怎么在 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)

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

    JavaScript(Node)

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

    1. // 使用node.js的输入接口
    2. const readline = require('readline');
    3. // I/O
    4. const rl = readline.createInterface({
    5. input: process.stdin,
    6. output: process.stdout
    7. });
    8. // 监听控制台的输入
    9. rl.on('line', function(line) {
    10. var data = line.trim() //拿到控制台输入
    11. //编码
    12. console.log(result); //输出结果
    13. // 结束进程
    14. process.exit(0);
    15. });

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

    代码如下

    1. const readline = require('readline');
    2. const rl = readline.createInterface({
    3. input: process.stdin,
    4. output: process.stdout
    5. });
    6. var N = -1; // 接收第一行数据
    7. var rows = []; //用于存储接下来每行的输入
    8. rl.on('line', function(line) {
    9. if (N < 0) {
    10. N = parseInt(line.trim()); //读取第一行
    11. } else {
    12. rows.push(line.trim()); //将每次输入的行数据存入
    13. if (N == rows.length) {
    14. // 编码
    15. console.log(N, rows); //输出
    16. // 触发'close'事件,结束进程。或者直接写:process.exit(0);
    17. rl.close()
    18. }
    19. }
    20. });
    21. rl.on('close', function() {
    22. process.exit(0);
    23. });

    JavaScript(node)

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

    1. //前面的不变
    2. let rows = []; //用于存储接下来每行的输入
    3. rl.on('line', function(line) {
    4. rows.push(line.trim()); //将每次输入的行数据存入
    5. if (2 == rows.length) { // 行数在此
    6. let N = rows[0], list = rows[1].split(' '), res=[];
    7. // 编码
    8. console.log( res.join(' ')); //输出
    9. process.exit(0);
    10. }
    11. });

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

    Java 编码规范:

    1. /* new Scanner(System.in) 获取输入
    2. System.out.println() 输出
    3. */
    4. import java.util.Scanner;
    5. public class Main {
    6. public static void main(String[] args) {
    7. Scanner scanner = new Scanner(System.in);
    8. String str1 = scanner.nextLine();
    9. String str2 = scanner.nextLine();
    10. scanner.close();
    11. // 编码
    12. System.out.println('xx');
    13. }
    14. }

    C 编码规范

    1. /* gets() 获取输入
    2. * printf() 输出
    3. */
    4. #include <stdio.h>
    5. #include <string.h>
    6. #define N 50
    7. int main() {
    8. char s1[N],s2[N];
    9. gets(s1);
    10. gets(s2);
    11. int res = 0;
    12. // 编码
    13. printf("%d\n", res)
    14. return 0;
    15. }

    C++ 编码规范

    1. /* getline(cin, a); 读取输入
    2. cout<<res<<endl; 输出
    3. */
    4. #include<iostream>
    5. using namespace std;
    6. int main() {
    7. string a,b;
    8. getline(cin,a);
    9. getline(cin,b);
    10. int res = 0;
    11. // 编码
    12. cout<<res<<endl;
    13. return 0;
    14. }

    Python 编码规范

    1. '''
    2. input() 读取输入
    3. print() 输出
    4. '''
    5. def solution:
    6. a=input()
    7. b=input()
    8. # 编码
    9. print('xx')
    10. solution()

     

  • 相关阅读:
    threejs视频教程学习(4):贴图、材质、光线
    QsciScintilla等编辑器实现不同区域鼠标右键处理方式不同的方法
    L2t*+NPS
    Mybatis源码编译
    Java常见面试知识点汇总(2)
    dij求最长路
    png图片打包plist工具,手把手教你使用pngPackerGUI_V2.0
    时延检测利器-uftrace
    宠物玩具上亚马逊美国站CPC认证标准
    docker-compose Wordpress遇到的很多问题
  • 原文地址:https://blog.csdn.net/weixin_70437515/article/details/125514906