《LeetCode零基础指南》(第一讲) 函数

2023-05-16

文章目录

  • 零、了解网站
    • 1、输入输出
    • 2、刷题步骤
    • 3、尝试编码
    • 4、调试提交
  • 一、概念定义
    • 1、函数简介
    • 2、函数的基本概念
    • 3、函数的基本结构
    • 4、返回类型
    • 5、函数名
    • 6、参数列表
    • 7、函数体
    • 8、返回值
  • 二、题目分析
    • 1、整数乘法
    • 2、整数除法
    • 3、次幂函数
    • 4、开方函数
    • 5、最值函数
  • 三、推荐学习
  • 四、课后习题

零、了解网站

1、输入输出

  对于算法而言,就是给定一些输入,得到一些输出,在一般的在线评测系统中,我们需要自己手写输入输出函数(例如 C语言中的scanfprintf),而在 LeetCode 这个平台,只需要实现它提供的函数即可。函数的传入参数就代表了的算法的输入,而函数的返回值则代表了的算法的输出。

2、刷题步骤

  找到一道题,以 两整数之和 为例,如何把这道题通过呢?如下图所示:


  第 1 步:阅读题目;

  第 2 步:参考示例;

  第 3 步:思考数据范围;

  第 4 步:根据题意,实现函数的功能;

  第 5 步:本地数据测试;

  第 6 步:提交;


3、尝试编码

  这个题目比较简单,就是求两个数的和,我们可以在编码区域尝试敲下这么一段代码。

int getSum(int a, int b){  // (1)
    return a + b;          // (2)
}
  • ( 1 ) (1) (1) 这里int是C/C++中的一种类型,代表整数,即 Integer,传入参数是两个整数;
  • ( 2 ) (2) (2) 题目要求返回两个整数的和,我们用加法运算符实现两个整数的加法;

4、调试提交


  第 1 步:实现加法,将值返回;

  第 2 步:执行代码,进行测试数据的调试;

  第 3 步:代码的实际输出;

  第 4 步:期望的输出,如果两者符合,则代表这一组数据通过(但是不代表所有数据都能通过哦);

  第 5 步:尝试提交代码;

  第 6 步:提交通过,撒花 🌻🌼🌺🌷🥀;


  这样,我们就大致知道了一个刷题的步骤了。但是,对于零基础来说,编码过程才是最难的,函数到底是什么东西呢?接下来,这一章着重介绍的就是函数了。

一、概念定义

1、函数简介

  函数可以把大的计算任务分解成若干较小的任务,然后通过调用的方式达到代码复用。一个逻辑不写多遍,减少代码维护成本。

  调用函数的一方不需要了解函数的具体实现,对于它来说,这部分是一个 “黑盒子”,从而使得程序结构更加清晰。

  C语言在设计中考虑了函数的 高效性易用性 两个原则。函数的实现应该尽量简短,因为函数可以套函数,一个程序应该尽量由许多小的函数组成,而不是由少量较大函数组成。

2、函数的基本概念

  在刷题的过程中,系统会给我们事先提供一个函数让我们来实现;而它则是调用函数的一方。在C语言中,最常见的当属main函数了。

int main()
{
    printf("5201314\n");
    return 0;
}

  以上就是一个函数,它被称为C语言的 入口函数,或者 主函数。所有程序执行,都是从这个函数开始的,以它为例,我们引出函数的一些基本概念。

3、函数的基本结构

  函数的基本结构如下图所示:


  通过这个图,我们类比main()这个函数,它的 返回类型int32位整型,函数名main参数列表 为 空,函数体printf("5201314\n");返回值 为 0。

4、返回类型

  函数的返回类型可以是任意类型,例如:整型、浮点型、字符型、自定义类型等等。返回类型 和 返回值 是 配套的,当返回类型为void时,函数内部的返回值部分可以写return ;,也可以直接省略不写。

5、函数名

  函数名可以类比我们自己的名字。是给函数调用方用的。例如:mainprintf都是函数名。

6、参数列表

  函数的参数列表必须用()括起来,参数是函数需要处理的数据,例如:

    printf("光天化日学C语言\n");

用来输出字符串,"光天化日学C语言\n"就是一个参数,参数类型是字符串。

7、函数体

  函数体内部就是你可以任意发挥的部分,也就是函数的核心逻辑部分,可以是各种语句的组合。当然也可以是另一个函数,也就是函数是支持嵌套的。

8、返回值

  函数的返回值则表示了这个函数最后返回给调用方的数据,如果返回值的类型和函数的返回类型不一致,则会进行强制类型转换,前提是能够强转的情况下。

二、题目分析

1、整数乘法

  实现一个函数multiply,不使用 * 运算符, 实现两个正整数的相乘。可以使用加号、减号、位移,但要吝啬一些。

int multiply(int A, int B){   // (1)
    return A * B;             // (2)
}


   ( 1 ) (1) (1) 这里int是C/C++中的一种类型,代表整数,即 Integer,传入参数是两个整数;

   ( 2 ) (2) (2) 题目要求返回两个整数的乘积,并且要求不能用*,那如果我用了会怎么样?答案是并不会怎么样,因为平台不会去对它做语法分析,只是调用了你的函数,提供一些输入数据,如果输出数据和它给定的相同,就算通过。作为你接触算法的第一道题,其实这些条件都无所谓的,能过就行,他只检测输入输出,不检测你实际代码。

  对于新人来说,把问题过掉比问题本身更重要,题数的增加,是信心的增加,信心比什么都重要,有了信心,你才能继续往下走,只要你能往下推进,你就能继续学习,继续学习你迟早会学到相应的算法。好了,过了这题以后,把这道题放入你的重刷列表,等你对算法有一定理解以后再来用题目要求的方法来过了它。


2、整数除法

  要求实现一个函数divide,给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。返回被除数 dividend 除以除数 divisor 得到的商。整数除法的结果应当截去(truncate)其小数部分,例如:truncate(8.345) = 8 以及 truncate(-2.7335) = -2
  假设我们的环境只能存储 32 位有符号整数,其数值范围是 [ − 2 31 , 2 31 − 1 ] [−2^{31}, 2^{31} − 1] [231,2311]。本题中,如果除法结果溢出,则返回 2 31 − 1 2^{31} − 1 2311

int divide(int a, int b){
    if(a == -2147483648 && b == -1) {
        return 2147483647;            // (1)
    }
    return a / b;                     // (2)
}


   ( 1 ) (1) (1) 仔细思考一下,只有当 a = − 2 31 a = -2^{31} a=231,且 b = − 1 b=-1 b=1 时,除法结果为 2 31 2^{31} 231 会溢出,其它情况都不会溢出,所以这种情况下,直接返回 2 31 − 1 2^{31} − 1 2311

   ( 2 ) (2) (2) 不溢出的情况,直接返回a/b即可,C语言会自己做向下取整;

3、次幂函数

  要求实现一个函数myPow,给定两个数 x x x n n n,求 x n x^n xn

double myPow(double x, int n){  // (1)
    return pow(x, n);           // (2)
}
  • ( 1 ) (1) (1) double是C/C++中的双精度浮点数,即小数;
  • ( 2 ) (2) (2) 不好意思,C语言有现成的求幂函数pow(x,n)就是求 x x x n n n 次幂;

4、开方函数

  实现一个函数mySqrt,给定一个非负整数 x x x ,计算并返回 x x x 的 算术平方根 。由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。

int mySqrt(int x){        // (1)
    return (int)sqrt(x);  // (2) 
}


   ( 1 ) (1) (1) 返回值是传参的算术平方根的取整;

   ( 2 ) (2) (2) 不好意思,这题本来是二分查找,又被水过去了。C语言有取平方根的函数sqrt,记得(int)进行强制转换,不强转估计也没事(会在返回的时候进行自动转换);

5、最值函数

  编写一个函数maximum,找出两个数字 a a a b b b 中最大的那一个。不得使用if-else或其他比较运算符。

int maximum(int a, int b){
    return a > b ? a : b;   // (1)
}


   ( 1 ) (1) (1) 这题考察的是C语言中唯一的三目运算符:条件运算符;

三、推荐学习

🌌《算法零基础100讲》🌌

(第1讲) 幂和对数

四、课后习题

  课后所有习题,在上文都能找到答案,标记为 [必做] 的题请务必刷完,然后在 九日集训 频道发布自己的感想。只有第一天坚持下来,才会有第二天。
  坚持!加油!你可以的!

序号题目链接难度必做
1371. 两整数之和★☆☆☆☆1
2面试题 17.01. 不用加号的加法★☆☆☆☆1
3剑指 Offer 65. 不用加减乘除做加法★☆☆☆☆1
4面试题 08.05. 递归乘法★☆☆☆☆1
529. 两数相除★☆☆☆☆0
650. Pow(x, n)★☆☆☆☆0
769. Sqrt(x)★☆☆☆☆0
8面试题 16.07. 最大数值★☆☆☆☆0
92119. 反转两次的数字★☆☆☆☆0
👇🏻 关注公众号 观看 精彩学习视频👇🏻
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

《LeetCode零基础指南》(第一讲) 函数 的相关文章

随机推荐

  • 《画解数据结构》九张动图,画解队列

    本文已收录于专栏 画解数据结构 零 前言 目前本专栏正在进行优惠活动 在博主主页添加博主好友 好友位没有满的话 可以获取 付费专栏优惠券 数据结构 和 算法 是密不可分的 两者往往是 相辅相成 的存在 所以 在学习 数据结构 的过程中 不免
  • 《画解数据结构》(2 - 1)- 树

    本文已收录于专栏 画解数据结构 前言 目前本专栏正在进行优惠活动 在博主主页添加博主好友 好友位没有满的话 可以获取 付费专栏优惠券 数据结构 和 算法 是密不可分的 两者往往是 相辅相成 的存在 所以 在学习 数据结构 的过程中 不免会遇
  • 《画解数据结构》三张动图,画解哈希

    本文已收录于专栏 x1f333 画解数据结构 x1f333 零 前言 目前本专栏正在进行优惠活动 xff0c 在博主主页添加博主好友 xff08 好友位没有满的话 xff09 xff0c 可以获取 付费专栏优惠券 数据结构 和 算法 是密不
  • 《画解数据结构》九张动图,画解顺序表

    本文已收录于专栏 画解数据结构 零 前言 目前本专栏正在进行优惠活动 在博主主页添加博主好友 好友位没有满的话 可以获取 付费专栏优惠券 这篇文章 作者将用 七张动图 来阐述一种最基础的顺序结构 顺序表 相信看我文章的大多数都是 大学生 能
  • 《画解数据结构》十张动图,画解双端队列

    本文已收录于专栏 画解数据结构 零 前言 目前本专栏正在进行优惠活动 在博主主页添加博主好友 好友位没有满的话 可以获取 付费专栏优惠券 数据结构 和 算法 是密不可分的 两者往往是 相辅相成 的存在 所以 在学习 数据结构 的过程中 不免
  • 《画解数据结构》二十五彩图,画解平衡二叉树

    本文已收录于专栏 画解数据结构 前言 目前本专栏正在进行优惠活动 在博主主页添加博主好友 好友位没有满的话 可以获取 付费专栏优惠券 上一篇文章 二叉搜索树 中 对于 增 删 改 查 的时间复杂度为 O l o g
  • 安装ofsoftswitch13的问题解决

    安装ofsoftswitch13的问题解决 cmake时出现错误 xff0c 是因为前面的库有的没有安装好 xff0c 安装好以后 xff0c 错误消失 根据CPqD ofsoftswitch13 OpenFlow 1 3 switch 给
  • 《画解数据结构》之画解二叉树

    本文已收录于专栏 画解数据结构 前言 目前本专栏正在进行优惠活动 在博主主页添加博主好友 好友位没有满的话 可以获取 付费专栏优惠券 数据结构 和 算法 是密不可分的 两者往往是 相辅相成 的存在 所以 在学习 数据结构 的过程中 不免会遇
  • 《画解数据结构》三十张彩图,画解二叉搜索树

    本文已收录于专栏 画解数据结构 前言 目前本专栏正在进行优惠活动 在博主主页添加博主好友 好友位没有满的话 可以获取 付费专栏优惠券 我们知道 顺序表 可以 快速索引 数据 而 链表 则可以快速的进行数据的 插入 和 删除 那么 有没有一种
  • 《画解数据结构》九张图画解二叉堆

    本文已收录于专栏 x1f333 画解数据结构 x1f333 前言 目前本专栏正在进行优惠活动 xff0c 在博主主页添加博主好友 xff08 好友位没有满的话 xff09 xff0c 可以获取 付费专栏优惠券 在之前的文章 二叉搜索树 中
  • 《算法零基础100讲》(第1讲) 幂和对数

    文章目录 零 写在前面 一 概念定义 1 幂 2 对数 3 换底公式 二 题目描述 三 算法详解 四 源码剖析 五 推荐专栏 六 习题练习 零 写在前面 目前本专栏正在进行优惠活动 在博主主页添加博主好友 好友位没有满的话 可以获取 付费专
  • 《算法零基础100讲》(第2讲) 数列

    文章目录 零 写在前面 一 概念定义 1 等差数列 2 等比数列 3 斐波那契数列 二 题目描述 三 算法详解 四 源码剖析 五 推荐专栏 六 习题练习 零 写在前面 这是 算法零基础100讲 专栏打卡学习的第 2 天了 如果觉得本专栏太贵
  • 《LeetCode零基础指南》(第九讲) 简单递归

    文章目录 零 了解网站 1 输入输出 2 刷题步骤 3 尝试编码 4 调试提交 一 概念定义 1 递归的含义 2 递归调用阶乘 1 实现一个函数 2 递归出口 3 递推关系 3 为什么叫递归 二 题目分析 1 阶乘尾后零 2 将数字变成 0
  • 《LeetCode零基础指南》(第八讲) 二级指针

    文章目录 零 了解网站 1 输入输出 2 刷题步骤 3 尝试编码 4 调试提交 一 概念定义 1 二级指针 2 解引用 3 力扣中的二级指针 4 内存申请模板 二 题目分析 1 翻转图像 2 转置矩阵 3 重塑矩阵 4 将一维数组转变成二维
  • 《LeetCode零基础指南》(第七讲) 二维数组

    文章目录 零 了解网站 1 输入输出 2 刷题步骤 3 尝试编码 4 调试提交 一 概念定义 1 矩阵的定义 2 矩阵的水平翻转 3 矩阵的垂直翻转 4 矩阵的顺时针旋转 5 矩阵的逆时针旋转 6 矩阵的转置 7 二维数组 8 二维数组的索
  • 《LeetCode零基础指南》(第五讲) 排序API

    文章目录 零 了解网站 1 输入输出 2 刷题步骤 3 尝试编码 4 调试提交 一 概念定义 1 排序简介 2 qsort 简介 3 qsort 调用 4 比较函数 1 函数原型 2 函数定义 3 简化写法 5 更多比较函数 二 题目分析
  • 《LeetCode零基础指南》(第三讲) 一维数组

    文章目录 零 了解网站1 输入输出2 刷题步骤3 尝试编码4 调试提交 一 概念定义1 顺序存储2 存储方式3 长度和容量4 数组的索引5 数组的函数传参 二 题目分析1 数组的查找2 数组的最小值3 斐波那契数列4 绝对值为 k 的数对5
  • js拼字符串,显示在页面上,出现undefined字样处理办法

    首先 xff0c 你需要明白为什么会出现undefined xff0c 这个东西是什么 xff1f undefined是说明你所使用的对象未定义 xff0c 为什么会未定义 xff1f 例如 xff1a var str str 61 str
  • 《LeetCode零基础指南》导读

    文章目录 一 出该专栏的目的 二 本专栏适宜人群 三 本专栏涉及的知识点 四 本专栏收费模式 五 付费玩家专属福利 六 专栏阅读须知 七 配套赠送福利 一 出该专栏的目的 由于之前的 算法零基础100讲 为很多真正零基础的同学造成了困扰 他
  • 《LeetCode零基础指南》(第一讲) 函数

    文章目录 零 了解网站1 输入输出2 刷题步骤3 尝试编码4 调试提交 一 概念定义1 函数简介2 函数的基本概念3 函数的基本结构4 返回类型5 函数名6 参数列表7 函数体8 返回值 二 题目分析1 整数乘法2 整数除法3 次幂函数4