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

news2024/11/20 10:28:56

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

  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/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]);

在这里插入图片描述

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

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]);

在这里插入图片描述

● 但是我们还是需要判断数组中是不是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);

在这里插入图片描述

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

// 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);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1035344.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Kettle REST Client获取token调用接口解析JSON入文件实战

Kettle REST Client通过GET获取token以POST方式请求接口解析JSON入文件完整实例 需求说明 通过kettle组件调用接口并解析JSON成结构化数据入文件。 完整实例 解决方法 利用生成记录组件定义URL参数通过REST ClENT组件请求得到TOKEN通过JSON INPUT组件解析接口请求的结果通过…

vue3新语法糖<script setup>

各种使用方法参考&#xff1a;(184条消息) 【vue3学习系列】组合式api中&#xff0c;替代setup()函数的&#xff1c;script setup&#xff1e;特性写法_庞囧的博客-CSDN博客https://blog.csdn.net/pagnzong/article/details/121733394 一、参考&#xff1a;Vue3 script setup …

Git版本控制:入门到精通

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

简单的自托管书签服务NeonLink

什么是 NeonLink &#xff1f; NeonLink 是一个简单且开源的自托管书签服务。它是轻量级的&#xff0c;使用最少的依赖项&#xff0c;并且易于通过 Docker 安装。由于系统要求较低&#xff0c;该应用程序非常适合部署在 RaspberryPI 上。 安装 在群晖上以 Docker 方式安装。 …

图片可变码怎么做?可编辑二维码制作教程

现在很多人会将拍摄的图片转二维码来展示&#xff0c;这种方法能够有效的让更多人更快的查看图片内容&#xff0c;那么图片生成二维码该怎么做呢&#xff1f;有些小伙伴知道现在二维码可以在图案不变情况下修改内容&#xff0c;如果我们需要不断填充照片&#xff0c;那么这种类…

4.基本IO口操作

CC2530端口资源&#xff1a;三个端口&#xff0c;表示为 P0、P1 和 P2。P0 和 P1 是完全的 8 位端口&#xff0c;而 P2 仅有 5 位可用 CC2530的IO口的一些功能&#xff1a; 通用IO口、外设IO口&#xff08;定时器、USART、ADC&#xff09; 输入引脚、输出引脚 当输入时&#…

奇安信天擎Linux客户端部署相关事项

奇安信天擎Linux客户端部署 一 Linux天擎客户端部署在线部署离线部署 二 Linux 单机部署需要开放的端口三 Linux天擎客户端停止和启动天擎的命令四 Linux天擎客户端卸载五 卸载后检查六 Linux天擎客户端病毒库更新操作步骤七 Linux客户端是否有补丁库&#xff1f; 一 Linux天擎…

设备巡检电力水利物业巡检小程序开源版开发

设备巡检电力水利物业巡检小程序开源版开发 以下是设备巡检电力水利物业巡检小程序开源版的可能功能列表&#xff1a; 用户登录/注册&#xff1a;用户可以通过手机号或其他方式进行登录和注册。 首页展示&#xff1a;展示设备巡检电力水利物业巡检小程序的基本信息和操作指南…

6.1 KMP算法搜索机器码

KMP算法是一种高效的字符串匹配算法&#xff0c;它的核心思想是利用已经匹配成功的子串前缀的信息&#xff0c;避免重复匹配&#xff0c;从而达到提高匹配效率的目的。KMP算法的核心是构建模式串的前缀数组Next&#xff0c;Next数组的意义是&#xff1a;当模式串中的某个字符与…

【力扣】83. 删除排序链表中的重复元素

题目描述 给定一个已排序的链表的头 head &#xff0c; 删除所有重复的元素&#xff0c;使每个元素只出现一次 。返回 已排序的链表 。 示例 1&#xff1a; 输入&#xff1a;head [1,1,2] 输出&#xff1a;[1,2] 示例 2&#xff1a; 输入&#xff1a;head [1,1,2,3,3] 输…

笔试强训Day(一)

T1&#xff1a;组队竞赛 链接&#xff1a;组队竞赛__牛客网 牛牛举办了一次编程比赛,参加比赛的有3*n个选手,每个选手都有一个水平值a_i.现在要将这些选手进行组队,一共组成n个队伍,即每个队伍3人.牛牛发现队伍的水平值等于该队伍队员中第二高水平值。 例如: 一个队伍三个队员…

【DDPM论文解读】Denoising Diffusion Probabilistic Models

0 摘要 本文使用扩散概率模型合成了高质量的图像结果&#xff0c;扩散概率模型是一类受非平衡热力学启发的潜变量模型。本文最佳结果是通过根据扩散概率模型和朗之万动力学的去噪分数匹配之间的新颖联系设计的加权变分界进行训练来获得的&#xff0c;并且本文的模型自然地承认…

Jupyter Notebook中的魔法命令

关于魔术命令 Jupyter Notebook 使用的 Python 内核通常是 IPython 内核。IPython 是 Python 的增强交互式解释器&#xff0c;它提供了许多额外的功能&#xff0c;使得在 Jupyter Notebook 中编写和执行 Python 代码更加方便和强大。所以jupyter使用的是IPython的语法 IPytho…

彩色图像处理在数字图像处理中的应用(数字图像处理概念 P5)

文章目录 彩色模型伪彩色处理全彩色数字图像处理基础彩色变换平滑和锐化 彩色模型 伪彩色处理 全彩色数字图像处理基础 彩色变换 平滑和锐化

有名管道及其应用

创建FIFO文件 1.通过命令&#xff1a; mkfifo 文件名 2.通过函数: mkfifo #include <sys/types.h> #include <sys/stat.h> int mkfifo(const char *pathname, mode_t mode); 参数&#xff1a; -pathname&#xff1a;管道名称的路径 -mode&#xff1a;文件的权限&a…

MySQL学习笔记5

1、MySQL中的SQL语句&#xff1a; SQL 是 Structure Query Language(结构化查询语言)的缩写,它是使用关系模型的数据库应 用语言,由 IBM 在 20 世纪 70 年代开发出来,作为 IBM 关系数据库原型 System R 的原型关 系语言,实现了关系数据库中的信息检索。 20 世纪 80 年代初,美…

【ardunio】青少年机器人四级实操代码(2023年9月)

目录 一、题目 二、示意图 三、流程图 四、硬件连接 1、舵机 2、超声波 3、LED灯 五、程序 一、题目 实操考题(共1题&#xff0c;共100分) 1. 主题&#xff1a; 迎宾机器人 器件&#xff1a;Atmega328P主控板1块&#xff0c;舵机1个&#xff0c;超声波传感器1个&…

OLTP和OLAP有什么区别和不同?

OLTP概念 操作型处理&#xff0c;叫联机事务处理OLTP(On-LineTransactionProcessing)&#xff0c;主要目标是做数据处理&#xff0c;它是针对具体业务在数据库联机的日常操作&#xff0c;通常对少数记录进行查询、修改。 用户较为关心操作的响应时间、数据的安全性、完整性和…

分享78个Python源代码总有一个是你想要的

分享78个Python源代码总有一个是你想要的 源码下载链接&#xff1a;https://pan.baidu.com/s/1ZhXDsVuYsZpOUQIUjHU2ww?pwd8888 提取码&#xff1a;8888 下面是文件的名字。 12个python项目源码 Apache Superset数据探查与可视化平台v2.0.1 API Star工具箱v0.7.2 Archery…

图形化思维:Graphviz和DOT语言的艺术与实践

前言 Graphviz和DOT语言是一对强大的工具&#xff0c;用于创建各种类型的图形&#xff0c;从流程图和组织结构图到网络拓扑图&#xff0c;无所不能。它们的灵活性和自定义性使得它们在数据可视化、系统设计、项目规划等各个领域都备受欢迎。然而&#xff0c;要想真正掌握Graph…