【算法】算法的空间复杂度和时间复杂度
前言🕵️♂️ 在之前的学习中,已经接触过了网上OJ题目 在一些题目中,我们经常可以看到时间复杂度和空间复杂度的要求 你可能和我有一样的疑惑,复杂度究竟是什么?我要怎么评判我自己写的算法的复杂度? 今天就让我们来认识认识~~ 1.算法效率🧐 和做任何事情一样,我们写的算法,自然也有它的运行效率。效率越高越好 1.1什么是算法 算法可以简单地理解为我们为了求解一个问题,所写的函数 在初识C语言中,我们学习过利用递归求解斐波那契数列的算法 1234567long long Fib(size_t N){ if(N < 3) return 1; return Fib(N-1) +...
【树莓派开发】出现报错pragama once in main file
前言 众所周知,#pragma once语句是防止头文件重复包含非常常用的一条语句 VS编译器在创建.h文件的时候会自动帮你在开头添加这个语句 但是在gcc编译器下,这个语句就可能会出现一些问题 所使用编译器: VS2019(windows10) 树莓派(linux-gcc) warning: #pragma once in main file 在我尝试在linux环境下使用#pragma once语句时,遇到了这个报错 解决这个问题的办法很简单,就是不要编译头文件 编译器会自动展开头文件,无需手动编译 出现问题原因 网上查了查:出现这个问题的原因是编译器在编译头文件的时候,#pragma once本身是没有含义的语句,所以报错了。 也有人说是因为linux不支持这个语句,我们来试试 右侧代码中包含了两个test.h的引用,在预处理中只包含了一次 去掉头文件中的#pragma...
【C语言】预处理操作(详解)
[TOC] 前言😜 上篇博客,我们提到了C语言程序运行的几个环节。 本篇博客中提到的预处理指令,就是在预处理阶段运行的一些代码。 本篇博客使用的编译器🎰 VS2019(win10) 树莓派(linux-gcc) 1.预定义符号 12345__FILE__ //进行编译的源文件__LINE__ //文件当前的行号__DATE__ //文件被编译的日期__TIME__ //文件被编译的时间__STDC__ //测试编译器是否遵循ANSI C,遵循值为1,不遵循则该符号未定义 2.#define 2.1定义标识符 1#define name stuff 12345678910#define MAX 1000#define reg register //为 register这个关键字,创建一个简短的名字#define do_forever for(;;) //用更形象的符号来替换一种实现#define CASE break;case //在写case语句的时候自动把 break写上//如果定义的...
【leetcode】LCR177:撞色搭配,数组中数字出现的次数
[TOC] 题目说明 来源:剑指 Offer 56 - I. 数组中数字出现的次数 另外,260只出现以此的数字3这道题和本题是一样的。2023年再回头看,剑指offer在leatcode上改名成lcr了。所以本文标题也更新一下。 难度:中等 一个整型数组 nums 里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。 示例 1: 12输入:nums = [4,1,4,6]输出:[1,6] 或 [6,1] 示例 2: 12输入:nums = [1,2,10,4,1,4,3,3]输出:[2,10] 或 [10,2] 限制:2 <= nums.length <=...
【C语言】函数调用的参数压栈(详解)
[TOC] 前言 在早期的学习中,我们已经了解到当函数传值调用参数的时候,用的是形参。 形参是实参的一份临时拷贝,对形参的改变不会影响实参里的值。 传值调用和传址调用👉点我 今天让我们以汇编语言来了解函数调用的参数压栈这一知识点 所用编译器:VS2019 不同编译器的实现可能略有不同,以实际为准 1.什么是栈区? 栈,是一种数据结构。 在学习C语言的过程中,我们一般只关注内存中的3个区域,分别是栈区、堆区和静态区。 其中堆区主要用于动态内存管理,在之前的博客中已经和大家介绍过。 详解动态内存管理👉点我 而栈区就是编译器给函数运行分配的空间了。 和堆区空间需要手动分配不同,这一部分空间是编译器自动管理的,函数的栈帧会自动创建,自动销毁。 1.1栈区小知识点 栈区的使用是从高地址到低地址 栈区的使用遵循先进后出,后进先出 栈区的放置是从高地址往低地址放置:push压栈 删除是从低往高删除:pop出栈 2.知识点 12345678910111213141516171819//本次使用的代码#include <stdio.h>int Add(int...
【C语言】程序运行过程:预处理/编译/汇编/链接
哈喽啊,盆友们。一起来看看C语言中编译预处理的内容吧!😜 1.程序编译的几个阶段 众所不周知,C语言的程序运行分为几个阶段。 咱们可以看看下面这个图,简单了解一二👇 细分开来,编译还分为3个小阶段:预编译(预处理)、编译、汇编 这三个阶段又分别做了什么事情呢?这就需要我们用linux下的gcc编译器来验证了 1.1 预编译 现在我们编写了一个这样的代码,分为两个文件 12345// Add.cint Add(int x,int y){ return x+y;} 123456789101112131415// test.c#include <stdio.h>extern int Add(int x,int y);#define M 100// 这是一个测试int main(){ int a=4; int b=10; printf("a+b=%d\n",Add(a,b)); printf("M+b=%d\n",Add(M,b)); return...
【树莓派开发】树莓派GeanyIDE和控制台下C/C++中文乱码问题解决方法
情况说明 之前使用树莓派的时候,遇到了中文乱码的问题。 VS2019编译器下写的.c文件,里面的中文注释在树莓派ide上乱码 树莓派控制台上,C语言代码输出中文时乱码 这里需要调整三个设置来解决该问题 1.设置VS,将文件保存为UTF8编码 VS2019默认用的是GBK编码,而不是一般中文需要的UTF8编码 这里我们可以安装一个Force UTF-8(No BOM)插件来解决该问题 在VS顶部工具栏里找到“拓展”-管理拓展 搜索Force UTF-8(No BOM),找到该插件并安装 这个插件的作用,是让VS保存文件都使用UTF8编码保存 安装完毕后,可以在原本文件中打一个注释并保存,这时候.c文件就已经是UTF8编码了 树莓派中可以更改文件编码,但这个更改并不会对已经乱码了的中文生效 更新22.03.01:使用该插件可能会导致报错该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失 出现这种情况需要禁用插件,重启VS才能解决。否则程序有中文注释就无法运行 2.更改Geany...
【树莓派开发】使用树莓派在Linux环境下编写C语言代码
前言 如何使用树莓派编译C语言代码呢? 21年暑假的时候,学习编程的劲头高涨,然后冲动消费买了个树莓派4B……结果压根不会用,吃灰了半年 不过现在已经学完了C语言,也接触了一丢丢Linux系统下的gcc指令,可以尝试用它来编写C语言代码了! 1.创建test.c文件 首先我们需要在一个文件夹里创建一个test.c文件 点击test.c文件后,树莓派会用自带的Geany编辑器打开它 然后我们可以往里写入C语言最经典的helloword代码 1234567#include <stdio.h>int main(void){ printf("hello wordl!\n"); return 0;} 2.编译运行该文件 保存文件后,打开顶部的命令行 输入以下代码。注意cd后需要空格,填写的是刚刚创建的test1.c文件的路径 1cd...
【Git】Sourcetree的初始化与使用
[TOC] 前言 还在用小乌龟管理你的git本地代码吗? 为何不来尝试一下,这款界面更加直观的git可视化工具! sorcetree官网👉https://www.sourcetreeapp.com/ 别看到英文官网就跑了,软件本身是中文界面! 注:本博文只讲述sourcetree初始化方式,并不讨论其与TortoiseGit的功能强弱 什么?你还不知道git是啥? 那还不赶快点击这篇博客了解一二!👇 实习生 Git...