📜  如何处理编码问题?

📅  最后修改于: 2021-06-26 11:08:46             🧑  作者: Mango

开发人员和学生解决了许多数据结构和算法的编码问题,但大多数人不了解它的重要性。他们中的许多人也认为数据结构和算法仅在面试中有所帮助,此后,日常工作中并没有使用所有这些复杂的东西。

如何解决编码问题

您可能是其中的一个,他们乐于学习新的语言或框架并以此为基础构建一些应用程序,但是一旦您进入了现实世界,您将意识到您的工作不仅是编写代码并使事情正常进行。您真正的工作是编写适量的优质代码,这意味着它应该高效且健壮,这就是数据结构和算法的作用。数据结构和算法不仅有助于获取程序的逻辑,还有助于为软件编写高效的代码。无论我们谈论时间复杂性还是内存管理,代码重构还是代码可重用性,您都将了解它在应用程序各个部分的价值。

在现实世界的项目中,您的大脑应该能够为复杂的事物编写快速有效的解决方案,并且只有在练习许多编码问题时才能做到这一点。了解语言和框架只是工具,它不会教您解决问题的技能。当您练习许多编码问题时,您将培养解决问题的能力。首先通过这两篇文章了解DSA的重要性…

  • 为什么数据结构和算法很重要?
  • 我不能在编程中使用逻辑。我应该怎么办?

每个开发人员都有他们自己的技巧,他们按照自己的模式来解决编码问题,但是当涉及到新开发人员时,他们总是不确定从哪里开始。他们中的许多人了解语法的问题,逻辑和基础知识,也了解其他人的代码,可以跟随他们一起学习,但是当他们自己解决问题时,他们就会陷入困境。即使他们了解语法或逻辑,他们也不了解如何将其思想转化为代码。我们将分享一些简单的步骤,以帮助您解决编码问题。

了解和分析问题

过去是否看过问题,多次阅读并完全理解都无所谓。现在,考虑问题并仔细分析。有时我们会读几行代码,并假设其余的事情都是我们自己做的,但是对您的问题的轻微更改可能会更改您的代码中的许多内容,因此请谨慎行事。现在拿一张纸写下所有内容。给出了什么(输入),您需要找出什么(输出)?在解决问题时,您需要向自己问一些问题……

  1. 您是否完全理解问题?
  2. 您能向其他人解释这个问题吗?
  3. 需要多少输入?
  4. 这些输入的输出是什么
  5. 您是否需要从问题中分离出一些模块或零件?
  6. 您是否有足够的信息来解决该问题?如果不是,则再次阅读该问题或将其清除给面试官。

例如:如果给定一个数组,并且需要返回仅包含偶数的数组,则首先要仔细分析问题。在解决问题时,您应该先问自己几个问题,然后再进入解决方案。

  1. 如何识别偶数?将该数字除以2,然后查看其余数是否为0。
  2. 我应该将什么传递给该函数?数组
  3. 该数组将包含什么?一个或多个数字
  4. 数组中元素的数据类型是什么?号码
  5. 最终目标是什么?目标是返回偶数数组。如果没有偶数,则返回一个空数组。

仔细浏览示例数据和示例

当您尝试了解问题时,请使用一些样本输入并尝试分析输出。进行一些样本输入将有助于您更好地理解问题。您还将清楚地知道您的代码可以处理多少种情况以及可能的所有输出或输出范围。阅读以下要点…

  • 考虑一些简单的输入或数据并分析输出。
  • 考虑一些复杂且较大的输入,并确定输出将是什么,以及需要为该问题处理多少个案例。
  • 还要考虑边缘情况。如果没有输入或输入的内容无效,将分析输出内容。

例如:如果您需要从给定数组返回偶数数组,则下面是一些案例或样本输入,您可以针对这些案例或样本分析问题及其输出。

[1]
[1, 2]
[1, 2, 3, 4, 5, 6]
[-300.35]
[-700.1, 1000, 5.1, -1000.25, 52, 900]

解决问题

当您看到一个复杂的或大的编码问题时,不要害怕和困惑于如何解决该问题,而是将问题分解为较小的块,然后尝试解决问题的每个部分。以下是您为了解决复杂的编码问题应遵循的一些步骤…

  • 针对现有问题制作流程图或UML。
  • 将问题分为子问题或较小的块。
  • 解决子问题。为每个子问题提供独立的功能。
  • 通过按要求的顺序或根据需要调用每个子问题的解决方案,以连接它们。
  • 在需要处理问题的任何地方使用类和对象(用于诸如管理系统等现实问题)

编写伪代码

在进入解决方案之前,为您的问题编写伪代码始终是件好事。基本上,伪代码定义了代码的结构,它将帮助您编写解决问题所需的每一行代码。读取伪代码可以清楚地知道您的代码应该做什么。许多人或经验丰富的程序员都跳过了这一步,但是当您编写伪代码时,编写最终代码的过程对您来说变得更加容易。最后,您只需要将伪代码的每一行转换为实际代码即可。因此,写下您的伪代码中的每个步骤和逻辑。以下是返回偶数数组的伪代码示例之一…

function getEvenNumbers
evenNumbers = []
for i = 0 to i = length of evenNumbers
  if (element % 2 === 0) 
    add to that to the array evenNumbers
return evenNumbers

用实码替换伪码

编写伪代码后,就该将其转换为实际代码了。用您正在使用的语言将伪代码的每一行替换为真实代码。如果您已将问题分为多个子问题,则请为每个子问题写下代码。在编写代码时,请记住三件事…

  • 您开始的地方
  • 你现在在哪?
  • 您的目的地是什么(最终结果)?

不要忘记使用样本数据集(我们已经在步骤2中讨论过)来测试您的代码,以检查实际输出是否等于预期输出。完成编码后,您就可以摆脱伪代码。以下是我们在之前的步骤中考虑过的示例的代码…

Javascript
function getEvenNumbers(arrayofNumbers) {
  let evenNumbers = []
for (var i = 0; i < arrayofNumbers.length; i++) {
    if (arrayofNumbers[i] % 2 === 0) {
      evenNumbers.push(arrayofNumbers[i])
    }
  }
return evenNumbers
}


当您在面试中编写代码时,请始终告诉面试官您如何解决问题。

  • 告诉面试官你是如何开始的
  • 告诉面试官您解决问题的方法
  • 与面试官讨论您在问题中面临的最困难的部分。
  • 告诉采访者解决每个子问题的方法以获得最终结果。
  • 与面试官讨论样本数据或测试案例。
  • 与面试官讨论更好的解决方案。

简化和优化您的代码

始终尝试改进您的代码。回顾过去,再次进行分析,然后尝试寻找更好的解决方案。前面我们已经提到过,您应该始终尝试编写适量的优质代码,因此请始终寻找比上一个更有效的替代解决方案。为问题写出正确的解决方案并不是您应该做的最后一件事。使用所有可能的解决方案完全探索问题,然后为您的代码写下最有效或最优化的解决方案。因此,一旦您完成了为下面的代码编写解决方案的工作,那么您应该问自己一些问题。

  • 该代码是否针对包括边缘情况在内的所有可能的输入运行。
  • 是否存在针对同一问题的替代解决方案?
  • 代码高效吗?可以提高效率还是可以提高性能?
  • 您还能如何使代码更具可读性?
  • 您还可以采取其他任何其他步骤或函数吗?
  • 您的代码中有重复吗?拿出来。

以下是返回偶数的数组的同一问题的替代解决方案…

function getEvenNumbers(arrayofNumbers) {
  let evenNumbers = arrayofNumbers.filter(n => n % 2 === 0)
  return evenNumbers
}