- 博客(28)
- 收藏
- 关注
原创 c++ 固定位数、小数点后几位、科学计数法问题
前言在c++中总会需要出现一些情况,需要你固定输出几位数/固定输出小数点后几位数,在这种情况下,在c++中可以利用以下方法科学计数法在定义数据为double类型时,输出数据时,当输出数据到达第七位时就会以科学计数法的形式输出#include<bits/stdc++.h>using namespace std;int main(){ while(1) { double n; cin>>n; cout<&
2021-12-05 01:02:23
2863
原创 strlen、length、size、sizeof的用法与区别
各函数用法一、strlen头文件string.h语法形式:size_t strlen( const char* str);该函数的默认使用类型是char * 也就是一个char指针类型,所以在判断过程中是根据指针往后找,对于 char p[]或者char *p是可以直接使用的但是对于直接的string类型,例如:string a=“abc” 这种需要需要用c_str()将C++ string转换为char*类型: strlen(a.c_str());函数定义strlen所作的
2021-08-12 16:35:22
2173
原创 牛顿迭代法
牛顿迭代法原理牛顿迭代法是一种可以用来快速求解函数零点的方法为了叙述方便,我们用 C 表示待求出平方根的那个整数。显然,C 的平方根就是函数的零点牛顿迭代法的本质是借助泰勒级数,从初始值开始快速向零点逼近。我们任取一个...
2021-08-12 13:08:34
4696
原创 由双引号与单引号引起基础知识总结
单引号与双引号单引号:字符型双引号:字符串型单引号引起的一个字符实际上代表一个整数(Ascll码)。#include<iostream>using namespace std;int main(){ char a='c'; int b; b=a; cout<<b;}输出结果:双引号引起的字符串,代表的却是一个指向无名数组起始字符的指针。该数组会被双引号之间的字符以及一个额外的二进制为零的字符 ‘\0’ 初始化。例如:“a"和’a’的区别,前者
2021-08-12 11:49:10
486
3
原创 8.10——二叉树的锯齿形遍历
题目描述解题思路定义一个变量来判断是奇数层还是偶数层若为奇数层从队列头取元素将子节点添加到队尾注意先加左节点,再加右节点若为偶数层从队列尾取元素将子节点添加到队头注意先加右节点,再加左节点其实就是按顺序储存再输出代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *rig
2021-08-10 18:50:45
72
原创 8.10——二叉树寻路
题目详情解题思路该题有两种思路思路一:不考虑”之“字形的节点顺序,按照一般的二叉树遍历顺序来做,直接找出路径,然后将路径反转思路二: 先观察,已经给出目标节点要求找出一条遍历路径,那就是寻找该目标节点的父节点们,又因为奇数层和偶数层的标号顺序不一,我们可以通过算式运算算出一个目标节点的父亲节点,然后继续搜索父亲节点的父亲节点——爷爷节点具体的一些算式:层数 = (int)log2(14) + 1父亲层数 = 层数 - 1位数(倒着数)=(14 - 2^(层数))颠倒位数 = 2 ^(层
2021-08-10 18:39:33
128
原创 8.10——leetcode x的平方根
题目要求解题思路基础思路最基础的方法就是一个一个找,即遍历0—X,将每一个遍历到的数都对自己平方,然后判断是否等于X优化一:利用二分法,可以有效的减少数据的遍历二分查找的下界为 0,上界可以粗略地设定为 x-1。在二分查找的每一步中,我们只需要比较中间元素 mid 的平方与 x 的大小关系,并通过比较的结果调整上下界的范围。由于我们所有的运算都是整数运算,不会存在误差优化二:利用数学方法,转化为对数运算指数函数:exp对数函数:log注意:由于计算机无法存储浮点数的精确值,
2021-08-10 11:57:49
116
2
原创 8.4——leetcode 二叉树的最小深度
题目详情解题思路应用递归的方法,直接一层层递归加一直到最后一个结点没有左右结点参数为要传入的二叉树根节点,返回的是int类型的深度,终止条件也是遇到空节点返回0,表示当前节点的高度为0注意存在以下条件叶子节点的定义是左孩子和右孩子都为 null 时叫做叶子节点当 root 节点左右孩子都为空时,返回 1当 root 节点左右孩子有一个为空时,返回不为空的孩子节点的深度当 root 节点左右孩子都不为空时,返回左右孩子较小深度的节点值代码/** * Definition for a
2021-08-04 19:59:07
81
1
原创 8.4——leetcode 字符串相乘
题目详情解题思路题目中的数据都为字符串,想让字符串相乘的话,只能是将字符串的每一个字符一一相乘,在将所有的乘积合并在一起。其实本质上来说是将小学乘法计算的过程用代码写出来,如图(图片来源于官方题解)所示:#代码class Solution {public: string multiply(string num1, string num2) { if(num1=="0"||num2=="0") return "0"; //如果有一个数为零,则返回0
2021-08-04 18:26:39
126
原创 KMP算法理解
kmp算法理解暴力匹配在字符串的匹配问题中,被匹配的字符串为”主串“,匹配的字符串为”模式串“,如果最终在主串中有模式串的出现,则返回其具体位置,反之则返回-1。在暴力算法中,就是直接遍历主串的每个元素,将模式串中的元素一一匹配。...
2021-08-02 23:02:29
337
2
原创 7.28——leetcode 括号生成
题目描述解题思路看到这道题的第一想法:限制条件为左边的括号数量一定大于等于右边的括号数量、要用递归进行回溯得到所有可能的结果所以尝试使用回溯法进行问题的解决我们知道,共有n对括号,也就是2n个括号,因为按常规思路要进行n次回溯,所以应该在每次回溯的时候放两个括号,于是我把两个括号所有可能的四种结果都放出来了,但是肯定不能随意放,因为生成的括号必须是有效的,什么是有效的呢?很容易想到两个限制条件:左边的括号数量大于等于右边的括号数量左边的括号也不是随意加的,因为我们只有n对括号于是我们设置
2021-07-28 21:12:36
133
1
原创 7.28——leetcode 驼峰式匹配
驼峰式匹配题目描述代码vector<bool> camelMatch(vector<string>& queries, string pattern) { vector<bool> ans(queries.size(), true); for (int k = 0; k < queries.size(); k++) { int j = 0; int i = 0; int tag = 1; while (i
2021-07-28 20:11:14
254
5
原创 7.28——leetcode 同构字符串
同构字符串(哈希表)题目要求哈希表作用: 快速判断一个元素是否在集合里结构: 分为两部分,分别为“索引”,“元素”。例如数组就是一个简单的哈希表,对于数组a[i]来说,i为该哈希表的索引,而a[i]表示的值即为元素。对于一般的哈希表来说,其“索引”和“元素”的类型是随意的,比如两者可能是字符、数字等等在该题中的应用:在本题中,要求判断两s,t的字符串所表示的结构是否相同,简而言之就是说,s中的结构为:abb型,t中的结构如果是abb则返回true,反之则反。在该题中使用map<type,
2021-07-28 18:51:22
159
10
原创 7.24——leetcode 设计循环队列
设计循环队列题目要求先导知识(队列)队列分为顺序队列和循环队列顺序队列采用一组地址连续的存储单元依次存储从队列头到队列尾的元素进队时,新元素按rear指针位置插入,然后队尾指针增一,即 rear = rear + 1出队时,将队头指针位置的元素取出,然后队头指针增一,即 front = front + 1队头指针始终指向队列头元素队尾指针始终指向队列尾元素的下一个位置循环队列循环队列采用一组地址连续的存储单元,将整个队列的存储单元首尾相连循环队列判断空队列有三种方式:1.使
2021-07-24 13:42:38
101
原创 7.24—— leetcode 二叉树的层序遍历
二叉树的层序遍历题目要求解题思路利用队列,将二叉树逐层保存,当队列将该层的节点处理完后再将下层节点入队列。最终结果全部都返回到ans中。具体思路看代码。代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), r
2021-07-24 12:32:39
78
原创 7.23——leetcode 最近请求的次数
最近的请求次数题目要求读题这道题,乍一看乱七八糟的读不懂,其实很简单。这样理解:t代表一个妹妹的号码,每次新妹妹(t)要被吴凢凢(q)骗成女朋友。吴凢凢就要把号码小于t-3000的妹妹分手,然后让妹妹(t)当正宫。最后统计,他现在有几个女朋友。代码class RecentCounter {private: queue<int> q;public: RecentCounter() { } int ping(int t) {
2021-07-23 15:52:18
69
原创 7.23——leetcode 用队列实现栈
用队列实现栈题目要求题解队列和栈可以“用二求一”,之前有做过用栈实现队列。这道题简单来说,就是用两个队列,一个用来辅助存值,在出栈入栈时改变次序。代码class MyStack { // 双队列实现栈 queue<int> q1; queue<int> q2;public: //初始化 MyStack() { } //入队列 void push(int x) { q1.push(
2021-07-23 15:43:55
92
原创 7.22——leetcode 150. 逆波兰表达式求值
150. 逆波兰表达式求值题目要求思路逆波兰表达式的计算:就是一个机械的入堆栈出堆栈的操作。1)设置一个堆栈,将逆波兰式从左到右开始进行出入堆栈操作,例:1,2,3,+,*2)遇到数字直接压栈3)遇到算符,将堆栈中的两个数字出栈。 如,读到+号后,2,3出栈,进行运算。注意,出栈时先出栈的元素是右算子,后出栈的是左算子,上例是2+3,不是3+24)将运算的结果作为新的算子,压入堆栈中。如运算结果(2+3)入栈,堆栈格局:1,(2+3)5)反复1-4的操作,得到的中序表达式就是: 1*(2
2021-07-22 11:04:33
177
2
原创 7.22——leetcode 145. 二叉树的后序遍历
145. 二叉树的后序遍历题目要求思路后序遍历的顺序为:左右根对于该题来说,如果直接从二叉树的左边开始遍历,具有一定的难度。故想到将整个顺序倒置为:根右左,然后在输出的时候倒置即可。具体做法为,利用栈的性质“先进后出”,将符合条件的点放入栈中,并存入ans的vector数组中,之后若将根以及右节点遍历完之后,开始遍历栈中节点的左节点,直到将整个二叉树的点遍历完。代码class Solution {public: vector<int> postorderTraversa
2021-07-22 10:08:25
111
1
原创 7.21——剑指 Offer 25. 合并两个排序的链表
剑指 Offer 25. 合并两个排序的链表题目要求思路两种思路重新开一个链表头,在不影响原来两链表的情况下,利用两个指针逐个比较两链表中元素的大小,然后将较小的值传递到新链表中直接在两链表中比较,将其中一个链表的值插入到另一个链表中注意:开始要判断,是否存在一个链表为空的情况代码class Solution {public: ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { //判空
2021-07-21 10:03:48
105
1
原创 7.21——剑指 Offer 06. 从尾到头打印链表
从尾到头打印链表题目要求思路这个题的目的是为了重新练习链表的使用,如果只涉及到链表的用法的话,该题就是利用多个指针的辅助,将链表逆序。还有另一思想,可以借助栈的特点(先进后出)将链表逆序。代码class Solution {public: vector<int> reversePrint(ListNode* head) { ListNode *pre = nullptr; vector<int> res; Lis
2021-07-21 09:58:20
106
1
原创 2021-07-15 被代码暴揍的day7——剑指 Offer 56 - I. 数组中数字出现的次数
剑指 Offer 56 - I. 数组中数字出现的次数题目要求思路这个题,用不开额外空间的方法来做,就要想到异或的思想,把这些数字看作宏观意义上的二进制码,通过异或的方法,可以将出现偶数次的数消去(消消乐),对于该题中,有俩不重复出现的数字的话,整个nums中异或结束后的结果其实就是这两个数字的异或。那么接下来将这两个数字区分出来就可以了,区分的方法就是相同的数异或为0,不同的异或为1。0和任何数异或等于这个数本身。所以,数组里面所有数异或 = 目标两个数异或 。由于这两个数不同,所以异或结果必
2021-07-17 00:03:57
132
3
原创 2021-07-16 被代码暴揍的day8——二进制转字符串 C++
leetcode-二进制转字符串题目要求代码class Solution {public: string printBin(double num) { string ans="0."; while(num!=0){ num*=2; if(num>=1){ ans+="1"; num-=1; }
2021-07-16 23:28:49
75
原创 2021-07-16 被代码暴揍的day8——有效的数独 C++
leetcode-有效的数独题目要求思路开一个大小为9的数组并初始化为0,将每一列/行/小九宫格块中的非"."元素记录到该数组中,即若存在"5"这个数字,将数组中第五个位置标记为1,在每一次遍历中,如若发现标记的该数组位置已经被标记过,则return false九宫格中每一个小九宫格的表示方法 m = j / 3 + i / 3 * 3; n = j % 3 + i % 3 * 3;其中,i为外层循环,j为内层循环。具体理解方法看下图,建议将图上的点自己试着表示出来坐标。j/3是将大九
2021-07-16 23:23:38
72
2
原创 2021-07-16 被代码暴揍的day8——简化路径 C++
leetcode-简化路径题目要求思路对于这道题目,我们需要知道每一级路径是什么样的(即两个’/'符号之间的内容)。如果是’.’,表示当前目录,这一级目录实际上什么用处也没有,需要排除。如果是’…'表示上一级目录,那么就需要向上返回一级。如果两个’/'连在一起,也是多余的,需要去掉。另外就是将路径最后面的’/'去掉。具体做法:我们设定一个栈stack来存储当前的绝对路径,用一个字符串temp来存储临时的子路径名,然后从前到后遍历题目给出的绝对路径中的所有字符,不是’/‘时更新temp
2021-07-16 22:58:22
89
2
原创 2021-07-12 被代码暴揍的day4——剑指 Offer 07. 重建二叉树
剑指 Offer 07. 重建二叉树题目要求代码实现class Solution {public: TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) { int len = preorder.size(); //求出树的长度 return build(preorder, inorder,0,len-1,0,len-1);
2021-07-12 23:03:44
147
1
转载 关于指针类型和指针类型转换的理解
前几天在判断“值相同的两个指针所指向的变量的值可以不同”这句话时,发现自己对指针类型一些概念仅仅是记住了结论。于是查阅了一些资料,记录一下一些与指针类型和指针类型转化相关的知识。一些用到的开始之前,先来复习一些会用到的知识。1.地址,字节,位 位(bit)是电子计算机中最小的数据单位。每一位的状态只能是0或1。 字节(Byte)是用于计量存储容量的一种单位,每一个字节由8位组成(1Byte = 8bit)。 地址可以理解为在一片内存中,每个字节(Byte)的编号。...
2020-10-05 03:32:45
331
原创 cin.get()的用法
在c++中,时常会搞不清楚cin与cin.get()的区别,那么到底两者之间的区别是什么呢?首先cin的输入有一个特点,在遇到‘ ’(空格)时,会结束输入,而cin.get()则将‘ ’也作为了一个字符放到输入里。那其次就是cin.get()的用法了。其用法如下:1.cin.get(字符变量名)可以用来接收字符char ch;ch=cin.get(); //或者cin.get(ch);cout<<ch<<endl;此时,无论...
2020-10-02 18:20:08
36607
11
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人