0

0

历史学家歇斯底里

花韻仙語

花韻仙語

发布时间:2024-12-02 15:21:09

|

448人浏览过

|

来源于dev.to

转载

历史学家歇斯底里

代码来临 2024 年第 1 天

第 1 部分

垒球以微笑开启新的一年

解决这个问题看起来很简单:

parse the input into two equal lists of numbers
sort each list in ascending order
compare both values at each index
determine the absolute value after calculating the difference
increment a tally by the absolute value

第 1 步:制作两个数字列表

首先,我将创建一个包含 2 项的列表,其中每个项目都是一个数字:

input.split('\n').split(' ').map(number)

然后,我将根据索引将项目提取到单独的列表中:

let [list1, list2] = [
  input.map((_,i) => i == 0),
  input.map((_,i) => i == 1)
]
运行它并修复我的错误

第一个错误:链接分割。
我无法对数组调用 split。
我必须在迭代方法中进行拆分,例如 map:

input.split("\n").map(...);

第二个错误:空间不足。
输入的每个数字之间包含多个空格,而不是一个:

input.split("\n").map((el) => el.split("   ").map(number));

第三个错误:过度考虑列表访问。

我的代码就像每个嵌套列表都是一个元素一样,并根据该元素是列表中的第一个还是第二个元素返回布尔值。

什么???!!!

此代码可识别每个列表并保留第一个或第二个项目:

let [list1, list2] = [
  input.map(list => list[0]),
  input.map(list => list[1]),
];

唉,我的算法现在生成两个数字列表!

哇,十个月没做这些了,我有点生疏了。

按升序对每个列表进行排序

这应该是简短而甜蜜的。

事实上,我将直接附加到上面的代码:

let [list1, list2] = [
  input.map(list => list[0]).sort((a,b) => a - b),
  input.map(list => list[1]).sort((a,b) => a - b),
];

在示例输入中发挥作用:

[ 1, 2, 3, 3, 3, 4 ]
[ 3, 3, 3, 4, 5, 9 ]

另外三步,一次性完成!

let answer = 0;
for (let i = 0; i < list1.length; i++) {
  answer += math.abs(list1[i] - list2[i]);
}

它适用于示例:11

它对我的拼图输入有效吗?

确实如此!

哇哦!一颗金星!

第2部分

测试运行时间的有趣转折

说明会让我相信:

for each number in list 1
  for each number in list 2
    if there's a match
      increment a tally by 1

这意味着列表 2 将被检查列表 2 长度乘以列表 1 长度...次。

每项 1000 件:100 万张支票

这还不错。但这似乎没有必要。

我关心的是列表 2 中每个数字的计数。

因此,我可以检查所有 1000 个数字一次,并根据其计数建立一个数字映射。然后,检查该列表 1000 次。

2000

我更喜欢这种方法。到代码!

构建数字和计数图

示例列表如下所示:

Figma
Figma

Figma 是一款基于云端的 UI 设计工具,可以在线进行产品原型、设计、评审、交付等工作。

下载
4, 3, 5, 3, 9, 3

所以我想要一个看起来像这样的对象:

{
  4: 1,
  3: 3,
  5: 1,
  9: 1
}

使用第 1 部分算法中的 list2,我需要执行归约来构建此对象:

let counts = list2.reduce((obj, num) => {
  if (!(num in obj)) {
    obj[num] = 1
  } else {
    obj[num] += 1
  }
  return obj
}, {})

令我惊讶的是,该代码片段的效果与预期完全一致!

我以为我忘记了 obj 中 num 的正确语法,但就是这样!

对每个列表项进行一次简单查找

另一个带有条件检查与数字关联的存在性和值的归约:

list1.reduce((score, num) => {
  score += (num in list2) ? num * list2[num] : 0
  return score
}, 0)

永远调试,因为,好吧,我简直不敢相信

我一直看到错误的分数。

我一直想知道为什么

我不断添加 console.log() 语句,其中包含越来越多的要打印的值。

我不断看到意想不到的值。

然后,我看到了。

我正在与 list2 进行比较,而不是与我的自定义计数对象进行比较!

对自我的巨大打击。但这正是我第一天所需要的。

这是工作代码:

let score = list1.reduce((score, num) => {
  if (num in counts) {
    score += num * counts[num];
  }
  return score;
}, 0);

这将为示例输入生成正确的答案。

希望它对我的拼图输入也能起到同样的作用。

希望它运行得快如闪电!

确实如此!

耶啊哈www!!!

两颗金星拉开序幕。

以及一些让我脚踏实地的初学者错误。

这就是我喜欢这些谜题的原因。

第二天也继续!

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
golang map内存释放
golang map内存释放

本专题整合了golang map内存相关教程,阅读专题下面的文章了解更多相关内容。

75

2025.09.05

golang map相关教程
golang map相关教程

本专题整合了golang map相关教程,阅读专题下面的文章了解更多详细内容。

36

2025.11.16

golang map原理
golang map原理

本专题整合了golang map相关内容,阅读专题下面的文章了解更多详细内容。

60

2025.11.17

java判断map相关教程
java判断map相关教程

本专题整合了java判断map相关教程,阅读专题下面的文章了解更多详细内容。

40

2025.11.27

console接口是干嘛的
console接口是干嘛的

console接口是一种用于在计算机命令行或浏览器开发工具中输出信息的工具,提供了一种简单的方式来记录和查看应用程序的输出结果和调试信息。本专题为大家提供console接口相关的各种文章、以及下载和课程。

415

2023.08.08

console.log是什么
console.log是什么

console.log 是 javascript 函数,用于在浏览器控制台中输出信息,便于调试和故障排除。想了解更多console.log的相关内容,可以阅读本专题下面的文章。

504

2024.05.29

页面置换算法
页面置换算法

页面置换算法是操作系统中用来决定在内存中哪些页面应该被换出以便为新的页面提供空间的算法。本专题为大家提供页面置换算法的相关文章,大家可以免费体验。

407

2023.08.14

Python 自然语言处理(NLP)基础与实战
Python 自然语言处理(NLP)基础与实战

本专题系统讲解 Python 在自然语言处理(NLP)领域的基础方法与实战应用,涵盖文本预处理(分词、去停用词)、词性标注、命名实体识别、关键词提取、情感分析,以及常用 NLP 库(NLTK、spaCy)的核心用法。通过真实文本案例,帮助学习者掌握 使用 Python 进行文本分析与语言数据处理的完整流程,适用于内容分析、舆情监测与智能文本应用场景。

10

2026.01.27

拼多多赚钱的5种方法 拼多多赚钱的5种方法
拼多多赚钱的5种方法 拼多多赚钱的5种方法

在拼多多上赚钱主要可以通过无货源模式一件代发、精细化运营特色店铺、参与官方高流量活动、利用拼团机制社交裂变,以及成为多多进宝推广员这5种方法实现。核心策略在于通过低成本、高效率的供应链管理与营销,利用平台社交电商红利实现盈利。

109

2026.01.26

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP自制框架
PHP自制框架

共8课时 | 0.6万人学习

PHP面向对象基础课程(更新中)
PHP面向对象基础课程(更新中)

共12课时 | 0.7万人学习

AI绘画教程
AI绘画教程

共2课时 | 0.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号