自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(57)
  • 资源 (2)
  • 收藏
  • 关注

原创 OJ_堆

1.数组中的第K个最大元素:在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。class Solution {public: int findKthLargest(vector<int>& nums, int k) { priority_queue<int> q; //堆 for(auto e:nums){ q.push(e);

2021-04-16 23:30:51 106

原创 OJ_栈/队列

1.逆波兰表达式的求值:根据 逆波兰表示法,求表达式的值。有效的算符包括 +、-、*、/ 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。class Solution {public: int evalRPN(vector<string>& tokens) { //用一个栈来存放操作数 //遍历后缀表达式:如果是操作数则入栈; //如果是操作符,则将栈顶元素和它下面一个元素出栈(先出栈的作右操作数),进行运算后再入栈

2021-04-10 23:57:06 135

原创 OJ_数学

1.二进制中1的个数:请实现一个函数,输入一个整数(以二进制串形式),输出该数二进制表示中 1 的个数。例如,把 9 表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2。class Solution {public: int hammingWeight(uint32_t n) { int count=0; for(int i=0;i<32;++i){ if((n>>i)&1==1)

2021-04-07 21:18:59 102

原创 简易计算器:算术表达式的计算

给出一组字符表达式,通过程序模拟计算器执行,最终得出运算结果。(没有考虑数字溢出场景)输入:“60 + 34 * 2 / 4 – 5”输出:72存储示例:str {“60”,“+”,“34”,“*”,“2”,“/”,“4”,“-”,“5”}将中缀表达式转为后缀表达式,然后计算后缀表达式的值,用栈实现。//将中缀表达式转为后缀表达式,然后计算后缀表达式的值(用栈实现)#include<iostream>#include<stack>#include<vecto

2021-04-05 16:13:14 353

原创 二叉树的前序、中序、后序遍历(递归/非递归)

1.非递归的遍历其实就是使用栈来模拟递归的遍历。2.三个遍历中(非递归),前序和中序类似,只是访问根结点的时机不同:前序是入栈时访问根结点,而中序是出栈是访问根结点。3.后序遍历是不同的:它需要有个标记来记录之前访问过的右结点,让结点不再访问已经访问过的右结点,否则会死循环。1.前序遍历:1.递归:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left;

2021-04-03 12:47:07 235

原创 OJ_数组/二分查找

1.旋转数组的最小数字把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。class Solution {public: int minArray(vector<int>& numbers) { //二分查找,最小值一定是这两个子数组的分界线 int low=0; //指向左

2021-03-28 16:48:42 115

原创 OJ_链表

1.环形链表1:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: bool hasCycle(ListNode *head) { //快慢指针 List

2021-03-27 17:48:20 934 3

原创 22_数组中第K个最大元素

题目描述在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例 1:输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4题解:优先级队列(实质是堆)class Solution {public: int findKthLargest(vector<int>& nums, int k) { for(auto e:nums){ q.p

2021-03-19 23:00:56 58

原创 21_逆波兰表达式求值

题目描述根据逆波兰表示法,求表达式的值。有效的运算符包括 +, -, *, / 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。说明:整数除法只保留整数部分。给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。示例 :输入: [“4”, “13”, “5”, “/”, “+”]输出: 6解释: 该算式转化为常见的中缀算术表达式为:(4 + (13 / 5)) = 6题解:遍历后缀表达式:1.用一个辅助栈存放操作数。若当前元素为操作数,则入栈

2021-03-18 22:03:58 103 1

原创 20_栈的压入、弹出序列

题目描述:剑指 Offer 31. 栈的压入、弹出序列输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列,但 {4,3,5,1,2} 就不可能是该压栈序列的弹出序列。题解:用辅助栈st模拟进出每次往st中压入一个数据,然后与出栈序列比较:1.若st的栈顶元素不等于出栈序列,则继续压入数据;2.若st的栈顶元素等于出栈序列,

2021-03-18 18:03:05 61

原创 19_最小栈

题目描述设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。push(x) —— 将元素 x 推入栈中。pop() —— 删除栈顶的元素。top() —— 获取栈顶元素。getMin() —— 检索栈中的最小元素。提示:pop、top 和 getMin 操作总是在 非空栈 上调用。题解:使用一个辅助栈注意辅助栈入栈时的条件。当有数据为 0、1、0 ,即最小元素有多个时,注意控制数据进入辅助栈的条件:if(_minst.empty() || val <

2021-03-18 17:09:27 63

原创 memcpy深浅拷贝问题

使用memcpy拷贝问题1.memcpy是内存的二进制格式拷贝,将一段内存空间中内容原封不动的拷贝到另外一段内存空间中。2. 如果拷贝的是内置类型的元素,memcpy即高效又不会出错,但如果拷贝的是自定义类型元素,并且自定义类型元素中涉及到资源管理时,就会出错,因为memcpy的拷贝实际是浅拷贝。例如:如果对象中涉及到资源管理时,千万不能使用memcpy进行对象之间的拷贝,因为memcpy是浅拷贝,否则可能会引起内存泄漏甚至程序崩...

2021-03-15 17:22:33 4230 2

原创 18_杨辉三角

题目描述给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。输入: 5输出:[[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]题解class Solution {public: vector<vector<int>> generate(int numRows) { vector<vector<int>> vv; //类对象数组 //开空间

2021-03-13 15:41:08 94

原创 17_只出现一次的数字 I/II/III

题目描述给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 不能使用额外空间来实现。示例 2:输入: [4,1,2,1,2]输出: 4题解1.对于这道题,可使用异或运算⊕。异或运算有以下三个性质:(1)任何数和 0 做异或运算,结果仍然是原来的数,即 a⊕0=a。(2)任何数和其自身做异或运算,结果是 0, a⊕a=0。(3)异或运算满足交换律和结合律,即a⊕b⊕a=b⊕a⊕a=b⊕(a⊕a)

2021-03-11 12:02:06 81

原创 string类的模拟实现

string类的简单模拟实现主要是实现string类的构造、拷贝构造、赋值运算符重载以及析构函数。深浅拷贝1.浅拷贝:(1)也称位拷贝,编译器只是将对象中的值拷贝过来。如果对象中管理资源,最后就会导致多个对象共享同一份资源,当一个对象销毁时就会将该资源释放掉,而此时另一些对象不知道该资源已经被释放,以为还有效,所以当继续对资源进项操作时,就会发生发生了访问违规。(2)如果string类中没有显式定义其拷贝构造函数与赋值运算符重载,此时编译器会合成默认的,当用s1构造s2时,编译器会调用默认的拷

2021-03-09 16:01:04 118

原创 16_字符串相加

题目描述给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。提示:num1 和num2 的长度都小于 5100num1 和num2 都只包含数字 0-9num1 和num2 都不包含任何前导零你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式。题解从后往前遍历两个字符串:1.定义val1和val2用于存放字符串每一位数字,定义next用于存放两数相加的进位。2.将两数相加,判断是否有进位。然后将相加后的数存放到新的字符串中,注意这里

2021-03-08 23:33:06 120

原创 15_验证回文串

题目描述给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。示例 1:输入: “A man, a plan, a canal: Panama”输出: true示例 2:输入: “race a car”输出: false题解1.先将字符串的大写字母全部转换为小写字母。2.定义两个指针begin和end,遍历字符串:(1)如果不是小写字母或数字,则后移/前移指针的位置,直至指针所指内容为字母或者数字;(2)如果是字母或者数字,则比较begin和end所指内

2021-03-08 21:27:54 106

原创 14_字符串最后一个单词的长度

题目描述计算字符串最后一个单词的长度,单词以空格隔开。示例输入:hello nowcoder输出:8题解从后往前找到第一个空格的位置,输出单词长度。#include<iostream>using namespace std;int main(){ string str; getline(cin,str); size_t pos=str.rfind(" "); cout<<str.size()-(pos+1)<<endl

2021-03-07 22:05:23 63

原创 13_字符串中的第一个唯一字符

题目描述给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。示例:s = “leetcode”返回 0s = “loveleetcode”返回 2题解1.对字符串进行两次遍历。2.在第一次遍历时,使用哈希映射统计出字符串中每个字符出现的次数。3.在第二次遍历时,只要遍历到了一个只出现一次的字符,那么就返回它的索引,否则在遍历结束后返回 -1。class Solution {public: int firstUniqChar(string

2021-03-07 15:11:35 71

原创 12_仅仅反转字母

题目描述给定一个字符串 S,返回 “反转后的” 字符串,其中不是字母的字符都保留在原地,而所有字母的位置发生反转。示例 1:输入:“ab-cd”输出:“dc-ba”示例 2:输入:“a-bC-dEf-ghIj”输出:“j-Ih-gfE-dCba”题解1.定义两个指针begin和end分别指向字符串的头和尾。2.遍历字符串S,如果指针所指内容是字母,则交换begin和end所指内容。3.如果不是字母则将begin后移一个位置,直至begin所指为字母;对end同理。class So

2021-03-07 14:28:37 87

原创 11_旋转数组的最小数字

题目描述:剑指 Offer 11. 旋转数组的最小数字把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。示例 1:输入:[3,4,5,1,2]输出:1题解1.直接遍历数组:int minArray(int* numbers, int numbersSize){ int min=numbers[0]; for

2021-03-05 23:16:22 75

原创 10_青蛙跳台阶问题

题目描述:剑指 Offer 10- II. 青蛙跳台阶问题一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。(0 <= n <= 100)示例 1:输入:n = 0输出:1示例 2:输入:n = 7输出:21题解1.假如只有1级台阶,只有一种跳法;假如有2级台阶,那就有2种跳法:一种是分两次跳,每次跳一下;另一种就是一次跳两

2021-03-04 22:36:05 325 4

原创 09_斐波那契数列

题目描述:剑指 Offer 10- I. 斐波那契数列写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N))。斐波那契数列的定义如下:F(0) = 0, F(1) = 1F(N) = F(N - 1) + F(N - 2), 其中 N > 1.斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。(0 <= n <= 100)答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返

2021-03-04 20:28:41 108 1

原创 08_从尾到头打印链表

题目描述:剑指 Offer 06. 从尾到头打印链表输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。示例 1:输入:head = [1,3,2]输出:[2,3,1]题解1.反转链表,并计算链表长度。2.遍历数组,将链表结点的值存入数组中。typedef struct ListNode ListNode;int* reversePrint(struct ListNode* head, int* returnSize){ int len=0; ListN

2021-03-03 17:55:35 68 3

原创 07_替换空格

题目描述:剑指 Offer 05. 替换空格请实现一个函数,把字符串 s 中的每个空格替换成"%20"。示例 1:输入:s = “We are happy.”输出:“We%20are%20happy.”题解1.遍历字符串 s,计算空格数量 n。2.开辟一个大小为 n*2+strlen(s)+1 的字符数组 ss 来存放新的字符串。3.再从左至右遍历字符串s:(1)如果当前字符 s[i] 是空格,则令 ss[j]=’%’、ss[j+1]=‘2’、ss[j+2]=‘0’,并将i的值加3。

2021-02-24 22:57:40 64 1

原创 06_数组中重复的数字

题目描述:剑指 Offer 03. 数组中重复的数字找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。题解临时数组:1.题目中说明数组nums中的所有数字都在 0~n-1 之间,所以可以创建一个大小为 n 的数组arr,初始化值为0。2.遍历数组nums:nums[i] 的值是几,就将arr中对应的位置的值加1(对应位置的值即为nums

2021-02-24 21:35:15 51

原创 05_计算日期到天数的转换

题目描述根据输入的日期,计算是这一年的第几天。测试用例有多组,注意循环输入。输入描述:输入多行,每行空格分割,分别是年,月,日输出描述:成功:返回outDay输出计算后的第几天失败:返回-1题解1.判断输入日期是否合法,如果不合法直接返回-1。2.如果日期合法:先计算前(month-1)个月的天数,再加上第month个月的天数。3.计算过程中注意闰年的判断,如果输入日期大于2月且是闰年,则2月为29天。#include<iostream>using namespace

2021-02-24 10:54:35 204

原创 C语言总结_03

21.printf()的返回值为打印字符的个数。22.头文件写法:#ifndef __ADD_H__#define __ADD_H__int ADD(int x,int y);#endif23.递归://求阶乘int factorial(int n){ if(n<=1) //递归出口 return 1; else return n*factorial(n-1);}//斐波那契数列:指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、

2021-02-23 22:31:36 103

原创 04_打印日期

题目描述给出年分m和一年中的第n天,算出第n天是几月几号。输入描述:输入包括两个整数y(1<=y<=3000),n(1<=n<=366)输出描述:可能有多组测试数据,对于每组数据,按 yyyy-mm-dd的格式将输入中对应的日期打印出来题解初始化日期为yyyy-01-00,然后将输入的日期加上n,判断是否向月、是否向年进位,最后输出日期。#include<iostream>using namespace std;class Date{priv

2021-02-22 23:03:46 97

原创 03_日期差值

题目描述有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天。输入描述:有多组数据,每组数据有两行,分别表示两个日期,形式为YYYYMMDD输出描述:每组数据输出一行,即日期差值题解1.定义一个静态数组存放12个月每月对应的天数,其中2月默认为28天。若是闰年则2月为29天。2.直接相减借位不太好实现。可以每次让较小的日期++,然后判断是否等于较大的日期,其中++的次数即为相差的天数。3.注意题目描述(有点坑):如果两个日期是连续的我们规定他们之间的天数为

2021-02-22 21:43:25 121 1

原创 02_日期累加

题目描述设计一个程序能计算一个日期加上若干天后是什么日期。输入描述:输入第一行表示样例个数m,接下来m行每行四个整数分别表示年月日和累加的天数。输出描述:输出m行,每行按yyyy-mm-dd的个数输出。题解1.定义一个静态数组存放12个月的日期,其中2月默认为28天。若是闰年则2月为29天。2.累加日期,若是大于当月所对应的天数,则向月进位;如果月增加到13,则另月为1,向年进位。3.注意题目要求的输入输出方式。#include<iostream>using names

2021-02-22 21:27:04 1012 3

原创 01_求1+2+3+...+n(要求不能使用乘除法等)

题目描述求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。题解1使用静态成员:1.设置静态成员变量_i和_sum,在构造函数中进行累加运算。2.创建一个大小为n的对象数组,在创建的时候会自动调用n次构造函数,即实现了n次累加运算。3.注意在每次获取到_sum的值后,要将_i和_sum的值复原,不然会出错。class Sum{public: Sum(){ _sum+=_i;

2021-02-20 15:25:07 2167 4

原创 C语言总结_02

11.const:(1)const定义的是变量,但又相当于常量;说它定义的是常量,但又有变量的属性,所以叫常变量。用 const 定义常变量的方法很简单,就在通常定义变量时前面加 const 即可,const 和变量类型 int 可以互换位置,二者是等价的:const int a = 10; int const a = 10;const char *p; // 声明一个指向字符常量的指针,p所指向的内容不可以被修改char const *p;// 同上char * const p;

2021-02-17 23:15:14 89

原创 C语言总结_01

一些零碎的知识点:#include< > 引用的是编译器的类库路径里面的头文件。一般是引用自带的一些头文件,如: stdio.h、conio.h、string.h、stdlib.h 等等。#include" " 引用的是你程序目录的相对路径中的头文件。一般是用来引用自己写的一些头文件。如果使用 #include" " ,它是会先在你项目的当前目录查找是否有对应头文件,如果没有,它还是会在对应的引用目录里面查找对应的头文件。当定义的全局变量和局部变量名字相同时,局部变量优先。如:int

2021-02-17 10:35:39 958 2

原创 蓝桥杯单片机CT107D_21_底层驱动代码

软件环境: Keil uVision 4.10硬件环境: CT107单片机综合实训平台 8051,12MHz1.SPI://SPI.h#ifndef __DS1302_H#define __DS1302_H#include<reg52.h>sbit SCLK = P1^7; sbit RST = P1^3; sbit DSIO = P2^3; void DS1302_WriteByte(unsigned char addr, unsigned char dat); /

2021-02-17 09:43:30 495 4

原创 蓝桥杯单片机CT107D_20_智能照明控制器

驱动://IIC.h#include<reg52.h>sbit SDA = P2^1; //数据线sbit SCL = P2^0; //时钟线void Delay_IIC(unsigned char t); //延时函数void IIC_Start(void); //起始信号void IIC_Stop(void); //停止信号void IIC_Ack(unsigned

2021-02-17 09:15:21 1059 4

原创 蓝桥杯单片机CT107D_19_24C02存储器的基本操作

驱动://IIC.h#include<reg52.h>sbit SDA = P2^1; //数据线sbit SCL = P2^0; //时钟线void Delay_IIC(unsigned char t); //延时函数void IIC_Start(void); //起始信号void IIC_Stop(void); //停止信号void IIC_Ack(unsigned

2021-02-17 09:12:42 317 1

原创 蓝桥杯单片机CT107D_18_模数转换器PCF8591的基本应用

#include<reg52.h>#include"IIC.h"sbit S4 = P3^3; //定义独立按键unsigned char dat_Rd1 = 0; //存放Rd1数据unsigned char dat_Rb2 = 0; //存放Rb2数据unsigned char state = 0; //标志位unsigned char code SEG_code[18] = {0xc0,0xf9,0xa4,0xb0,0x99,0x9

2021-02-17 09:09:45 1225 2

原创 蓝桥杯单片机CT107D_17_实时时钟DS1302的基本操作

驱动//SPI.h#include<reg52.h>#include<intrins.h>sbit SCLK = P1^7; sbit RST = P1^3; sbit DSIO = P2^3; void DS1302_WriteByte(unsigned char addr, unsigned char dat); //单字节写的时序unsigned char DS1302_ReadByte(unsigned char addr); //单字节读的时序

2021-02-17 09:07:30 855

原创 蓝桥杯单片机CT107D_16_模拟风扇控制系统

#include<reg52.h>#include"onewire.h"sbit L8 = P0^7; //工作LEDsbit L1 = P0^0;sbit L2 = P0^1;sbit L3 = P0^2; //定义LEDsbit S7 = P3^0;sbit S6 = P3^1;sbit S5 = P3^2;sbit S4 = P3^3; //定义独立按键unsigned char state = 0; //风扇模式标志位unsigne

2021-02-16 10:14:43 410 1

CT107D竞赛用板原理.zip

CT107D单片机综合训练平台原理图、CT107D使用说明书等

2021-02-17

XCOM V2.0.zip

单片机开发中用到的串口调试助手,XCOM V2.0,支持5/6/7/8位数据.支持1/1.5/2个停止位;支持多个常用波特率.支持自定义波特率;支持16禁止发送/接收显示.支持DTR/RTS控制;支持奇/偶/无校验;支持延时设置.支持时间戳功能;支持窗口保存.并可以设置编码格式;支持多条发送.并关联数字键盘.支持循环发送;支持定时发送.支持文件发送.支持发送新行;支持发送条目导出/导入(excel格式);支持无限制扩展条数.可自行增删;支持发送/接收区字体大小、颜色和背景色设置;支持协议传输(类modbus);支持简体中文、繁体中文、英文三种语言

2020-05-23

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除