发布于 2026-01-05 2 阅读
0

算法问题 - 使用 JavaScript 提供解决方案的入门指南

算法问题 - 使用 JavaScript 提供解决方案的入门指南

介绍

招聘人员如果想考察候选人的问题解决能力,就会给他们一些问题,并要求他们编写相应的算法。通过这种方式,招聘人员能够区分那些只会复制粘贴代码的人和那些真正理解语法和工作原理的人。但是,什么是算法呢?

跳转至:

算法(发音为AL-go-rith-um)是一种解决问题的程序或公式,它基于执行一系列特定的操作。计算机程序可以被视为一个复杂的算法。在数学和计算机科学中,算法通常指的是解决重复性问题(即“是什么”)的小型程序。

从上面的定义可以看出,算法是用来解决问题的,而要构建一个有效的算法,这个人必须对所要解决的问题有很好的理解。

用算法解决问题

在当前的技术发展趋势下,算法或问题解决能力方面的面试几乎不可避免。

算法面试

鉴于这种现实情况,如何才能设计出解决问题的算法?

解决算法问题的步骤

解决问题的步骤

  1. 理解——尝试理解问题,并将其分解成尽可能小的部分。
  2. 制定策略- 了解你的编程语言中有哪些工具可供你使用(本文以 JavaScript 为例)
  3. 实施——利用这些工具解决每一个小问题,并将这些解决方案结合起来,形成解决整个问题的最终方案。

例如,如果遇到一个单词回文问题,你会如何编写解决该问题的算法?

让我们应用以上步骤。

应用问题解决步骤

步骤A:理解

这里最大的问题是检查我们得到的单词反过来是否仍然相同。

然而,为了实现这一目标,我们必须先解决一些较小的问题,例如:

  • 如何保留对原始出处的引用。
  • 如何反转单词。
  • 但是,要反转单词,我们需要将单词拆分成字符。
  • 如果我们最终逆转了这一过程,我们需要将这些角色结合起来。
  • 最后,我们需要将新词与旧词进行比较。

步骤二:制定策略

我们披露时使用的一些工具包括以下这些:

  • 变量
  • 。分裂()
  • 价差运营商
  • if...else...条件语句
  • 三元运算符
  • 。撤销()
  • 。加入()

步骤 C:实施

将这个问题分解成更小的部分后,我们可以利用variableJavaScript 提供的工具来保留原始单词的副本。


const orginalWord = word;

Enter fullscreen mode Exit fullscreen mode

由于我们不能直接反转字符串,我们需要使用该.split("")方法分割单词并将其转换为数组。


let splittedWord = word.split("");

Enter fullscreen mode Exit fullscreen mode

现在我们可以像这样反转数组.reverse()


let reversedWord = splittedWord.reverse();

Enter fullscreen mode Exit fullscreen mode

现在顺序已经反转了。但是我们需要把它转换成一个没有分隔符的字符串。所以我们可以使用以下方法.join("")来实现:


let newWord = reversedWord.join("");

Enter fullscreen mode Exit fullscreen mode

最后,让我们比较一下最初得到的单词和我们现在反转后的单词。


   if(orginalWord === newWord){
     console.log(true)
   }else{
     console.log(false)
   }

Enter fullscreen mode Exit fullscreen mode

最终代码


function palindrome(word){
  const orginalWord = word;
   let splittedWord = word.split("");
   let reversedWord = splittedWord.reverse();
   let newWord = reversedWord.join("");

   if(orginalWord === newWord){
     return(true)
   }else{
     return(false)
   }
}

Enter fullscreen mode Exit fullscreen mode

其他人可以用以下代码解决这个问题:


function palindrome(word){
   return(word === [...word].reverse().join(""))
}

Enter fullscreen mode Exit fullscreen mode

注意,如果把问题分解开来,解决起来就容易多了。所以,算法的本质就是如何分而治之!

人们常说熟能生巧。因此,我特地准备了以下系列教程,旨在帮助你提升问题解决能力。这个系列教程是我之前决定深入学习算法时制作的。这个决定极大地提升了我的编程技能,我相信它也能同样提升你的编程水平,并增加你在技术面试中的成功率。

所以,请尽情欣赏这部剧集……

尽情享受这部剧集吧

25种算法助你提升问题解决能力

  1. 算法入门:7 种反转字符串的方法

  2. 算法入门:计算字符串中元音字母数量的 13 种方法

  3. 算法入门:查找字符串中出现频率最高的字符的 6 种方法

  4. 算法入门:句子首字母大写的 8 种方法

  5. 算法入门:6 种检查单词是否为回文的方法

  6. 算法入门:求汉明距离的三种方法

  7. 算法入门:找出句子中最长单词的 6 种方法

  8. 算法入门:9 种查找和替换单词的方法

  9. 算法入门:检查两个单词是否为字母异位词的 3 种方法

  10. 算法入门:创建猪拉丁语的三种方法

  11. 算法入门:检查两个句子是否为字母异位词的3种方法

  12. 算法 202:数组分块的三种方法

  13. 算法 202:四种无重复数组合并方法

  14. 算法 202:四种实现虚假弹跳的方法

  15. 算法 202:我的归属感(三种方式)

  16. 算法入门:反转整数的三种方法

  17. 算法 202:求一系列数值之和的 3 种方法

  18. 算法 202(我的面试题):用三种方式对字谜进行分组

  19. 算法入门:用 FizzBu​​zz 处理单个数字的 4 种方法

  20. 算法入门:两种方法对一系列数字进行 FizzBu​​zz 运算

  21. 算法入门:获得斐波那契数列的三种方法

  22. 算法101:求三个整数乘积的最大值的两种方法

  23. 算法101(面试题):判断两个词是否同构的两种方法

  24. 算法 202(面试题):用两种方式匹配括号

  25. 算法 202:袜子商人

奖金

奖金

新手求助:看多少教程才能成为高手?

助你找到第一份软件工程师工作的 3 个秘诀

结论

通过以上内容可以看出,算法并没有看起来那么难。本质上,它就是解决日常问题。但是,如果不练习,就很难轻松解决问题。

所以我鼓励你们按照上面介绍的算法系列进行学习和练习。

看看 GitHub 上的一些解决方案。

文章来源:https://dev.to/ebereplenty/algorithm-problems-baby-steps-in-providing-solutions-using-javascript-1edp