• 如何像开发人员一样思考_成为一个问题解决者


    程序员在处理大问题时通常会将其分解成多个小问题来解决。这个过程通常被称为“分解”或“分治”,它是一种将复杂问题分解成可管理的小问题的方法。
    以下是程序员思考如何将大问题分解成小问题的一些步骤:

    1. 确定问题域:程序员需要了解和理解问题的域,并确保对问题的目标、限制和要求有一个清晰的认识。
    2. 分析问题:程序员需要分析问题并确定该问题可以分解成哪些更小的子问题。这可能涉及到阅读文档、了解业务需求等。
    3. 列出子问题:程序员需要列出所有的子问题,并确保每个子问题都具有明确定义的输入和输出。
    4. 制定计划:程序员需要制定一个基于优先级的计划,以确定哪个子问题应该首先解决,并如何实现每个子问题的解决方案。
    5. 实施解决方案:程序员需要执行计划,解决每个子问题。这可能包括编写代码、测试、调试和优化。
    6. 整合解决方案:程序员需要整合所有子问题的解决方案,以解决大问题,并确保整体解决方案能够满足问题的目标、限制和要求。
      通过这样的分解和解决过程,程序员可以有效地处理复杂问题,并写出高效且可靠的代码。

    问题1

    例如下面有个数据记录了温度的记录

    const temperatures = [3, -2, -6, -1, 'error', 9, 13, 17, 15, 14, 9, 5];
    
    • 1

    需求

    我们工作的一家公司建立一个智能家居温度计。我们最近的任务是这样的:“给定一天的温度序列,计算温度振幅。请记住,有时可能会出现传感器错误。

    理解问题

    1/-什么是温度振幅? 答: 差异
    最高和最低温度之间
    1/如何计算最大和最小温度
    1/-什么是传感器错误? 做什么
    1/2) 分解成子问题如何忽略错误?查找临时数组中的最大值i/-在临时数组中查找最小值1/-从最大值减去最小值 (振幅) 并返回它

    ● 那我们之前学过,我们可以使用函数去实现某一个功能,找最大值和最小值是不是我们需要的功能,我们是不是要达到,不管你传入什么数组,我都能找到它的最大值。
    ● 所以我们首先选择使用函数去实现找最大值和最小值的功能。
    ● 那我们该如何实现呢?可以这样,起始,我们就把数组的【0】当作最大值,然后我们for循环一个一个比较,来把最大值存入变量中,之前学过!对吧?我们来实现

    const calcTempAmplitude = function (temps) {
      let max = temps[0];
      for (let i = 0; i < temps.length; i++) {
        if (temps[i] > max) max = temps[i];
      }
      console.log(max);
    };
    
    calcTempAmplitude([2, 55, 8, 6, 10]);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里插入图片描述

    这样我们的最大值的功能就找出来了;
    ● 最小值也是同理

    const calcTempAmplitude = function (temps) {
      let max = temps[0];
      let min = temps[0];
      for (let i = 0; i < temps.length; i++) {
        const curTemp = temps[i];
        if (curTemp > max) {
          max = curTemp;
        } else if (curTemp < min) {
          min = curTemp;
        }
      }
    
      console.log(max, min);
    };
    
    calcTempAmplitude([5, 4, 1, 22, 66, 12]);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    在这里插入图片描述

    ● 但是我们还是需要判断数组中是不是number类型,我们可以使用continue的方式

    const temperatures = [3, -2, -6, -1, 'error', 9, 13, 17, 15, 14, 9, 5];
    
    const calcTempAmplitude = function (temps) {
      let max = temps[0];
      let min = temps[0];
      for (let i = 0; i < temps.length; i++) {
        const curTemp = temps[i];
        if(typeof curTemp !== 'number') continue;
        if (curTemp > max) {
          max = curTemp;
        } else if (curTemp < min) {
          min = curTemp;
        }
      }
    
      console.log(max, min);
    };
    
    calcTempAmplitude(temperatures);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    在这里插入图片描述

    ● 这个功能就非常简单了,现在只要把差给返回就可以了

    // Remember, we're gonna use strict mode in all scripts now!
    'use strict';
    
    const temperatures = [3, -2, -6, -1, 'error', 9, 13, 17, 15, 14, 9, 5];
    
    const calcTempAmplitude = function (temps) {
      let max = temps[0];
      let min = temps[0];
      for (let i = 0; i < temps.length; i++) {
        const curTemp = temps[i];
        if (typeof curTemp !== 'number') continue;
        if (curTemp > max) {
          max = curTemp;
        } else if (curTemp < min) {
          min = curTemp;
        }
      }
    
      console.log(max, min);
      return max - min;
    };
    
    const ampltitude = calcTempAmplitude(temperatures);
    console.log(ampltitude);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
  • 相关阅读:
    vue3的面试题
    连续词袋模型(Continous bag of words, CBOW)
    【Git 学习笔记】第三章 分支、合并及配置项(下)
    组件之父子传值
    生态环境影响评价制图流程
    Kafka入门04——原理分析
    java:JDBC ResultSet结合Spring的TransactionTemplate事务模板的查询方式
    理解linux进程
    java计算机毕业设计智慧农业水果销售系统MyBatis+系统+LW文档+源码+调试部署
    java毕业设计手机在线销售系统mybatis+源码+调试部署+系统+数据库+lw
  • 原文地址:https://blog.csdn.net/weixin_42952508/article/details/133220870