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

     

  • 相关阅读:
    Unity的IFilterBuildAssemblies:深入解析与实用案例
    企业级数据仓库-数仓实战
    计算机毕业设计Java宠物寄养预约系统(源码+系统+mysql数据库+lw文档)
    工作中非常重要的测试策略,你大概没注意过吧
    Hive实战练习(包含数据集)
    网安学习Day14(web漏洞-SQL注入类型及提交注入)
    竞赛 题目:基于机器视觉的图像矫正 (以车牌识别为例) - 图像畸变校正
    AntDesignVue动态创建下拉菜单
    复旦大学:邮件系统安全运维实用建议
    在Android项目中使用SpringBoot框架
  • 原文地址:https://blog.csdn.net/weixin_70437515/article/details/125514906