![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c++
Gary_海航
这个作者很懒,什么都没留下…
展开
-
The C++ Programming Language 读书笔记(三)
本篇笔记是“指针,数组和结构”这一章的。一个字符串包含的字符个数比它看起来的字符数要多一个,它总由一个空字符‘\0’结束。例如sizeof(“both”)的值是5。注意:字符串的类型时“适当个数的const字符的数组”,所以“both”的类型就是const char[5].可以用字符串给一个char*赋值,允许这样做的原因是在以前的c和c++的定义中,字符串的类型就是char*.但是要注意:通过原创 2017-04-07 13:33:16 · 435 阅读 · 0 评论 -
剑指offer-重建二叉树
题目 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并输出它的后序遍历序列。 思路 先序遍历的第一个节点即为根结点,而中序遍历中,该节点左边的节点为左子树节点,右边的为右子树的节点,因此根据这些节点区间可以确定出...原创 2018-03-19 15:54:02 · 186 阅读 · 0 评论 -
剑指offer-二叉树的下一个节点
题目 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。 思路 根据中序遍历的特点,要找到一个节点的下一个节点无非就是三种情况:1、有右子树,这时只需要把其右孩子作为下一个遍历的(并不是要找的)节点,然后沿着该节点的左子树(如果有的话)出发,直到遇到叶子节点,那么该叶子节点就是其下一个要找的节点;2、没有右子树原创 2018-03-20 08:54:43 · 139 阅读 · 0 评论 -
剑指offer-查找
题目 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 思路 重点说一下二分查找法。如果是在排序的数组(或者部分排序的数组)中查找一个数字或者统计某个数字出现的次数,那么都可以尝试二分查找算法。二分查找法的精髓就在于,两个指针,原创 2018-03-21 11:26:21 · 200 阅读 · 0 评论 -
剑指offer-斐波那契数列
题目 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。 思路 递归不行,会超时,所以就用动态规划思想,利用一个数组来保存中间结果。#include<iostream>using namespace std;int Fibonacci(int n){ long long res[100]; res[0]=0; res[1]=1;原创 2018-03-21 11:14:27 · 205 阅读 · 0 评论 -
剑指offer-机器人的运动范围
题目 地上有一个m行n列的方格。一个机器人从坐标(0, 0)的格子开始移动,它每一次可以向左、右、上、下移动一格,但不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格(35, 37),因为3+5+3+7=18。但它不能进入方格(35, 38),因为3+5+3+8=19。请问该机器人能够到达多少个格子? 思路 回溯法,走出一步,就看能不能走四周的格子。 代码...原创 2018-04-16 19:57:14 · 179 阅读 · 0 评论 -
剑指offer-矩阵中的路径
题目 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。思路 回溯法:用回溯法解决问题就是,在某一步选择了其中一个选项,就进入了下一步,然后又面临新的选项,就这样递归的进行下去,当某条路走不通时,就退回一步。代码boo原创 2018-04-11 15:55:55 · 186 阅读 · 0 评论 -
剑指offer-剪绳子
题目 给你一根长度为n绳子,请把绳子剪成m段(m、n都是整数,n>1并且m≥1)。每段的绳子的长度记为k[0]、k[1]、……、k[m]。k[0]* k[1]*……*k[m]可能的最大乘积是多少?例如当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此 时得到最大的乘积18。 思路 动态规划 任何动态规划都是由递归演化出来的,因此先定义递归形式。 设f(n)为长度为n的绳...原创 2018-04-20 11:11:09 · 296 阅读 · 0 评论 -
剑指offer-数值的整数次方
题目:实现double Power(double base, int exponent), 求base的exponent次方,不得使用库函数,同时不需要考虑大数问题。#include<iostream>using namespace std;//主要考点在于需要考虑特殊情况double PowerWithUnsignedExponent(double base,unsigned int abs原创 2018-05-05 11:26:43 · 259 阅读 · 0 评论 -
(待扩展)读取一个文件统计词频
#include<iostream>#include<fstream>#include<string>#include<map>#include<set>using namespace std;int main(){ map<string,int>word_count; // set<str...原创 2018-05-14 11:00:40 · 376 阅读 · 0 评论 -
剑指offer-从尾到头打印链表
题目 输入一个链表的头节点,从尾到头反过来打印出每个节点的值。 思路 直接用栈。 代码struct ListNode{ int m_nValue; ListNode*m_pNext;};void PrintListReverse(ListNode*pHead){ stack<int> nodeStack; ListNode*pNo...原创 2018-03-19 10:35:04 · 165 阅读 · 0 评论 -
剑指offer-替换空格
题目 请实现一个函数,把字符串中的每个空格替换成“20%”。思路 从后往前替换,这样可以减少移动次数。 在合并两个数组(包括字符串)时,如果从前往后复制每个数字,则会重复移动某些数字多次,那么就可以考虑从后往前复制。 代码#include<iostream>using namespace std;void ReplaceBlank(char str[]){ ...原创 2018-03-18 13:48:56 · 170 阅读 · 0 评论 -
The C++ Programming Language 读书笔记(四)
本篇笔记是“表达式与语句”这一章的笔记。一个程序开始于对函数main()的调用,在这样做的时候,有两个参数被送给main(),其中一个描述了命令行参数的个数,称作argc,另外一个描述了命令行参数的数组,称作argv。命令行参数都是字符串,所以argv的类型是char*[argc+1]。人们有时候会想建立一种生存时间不依赖于作用域的对象,那么就用new和delete。new出来的对象只有当del原创 2017-04-11 11:21:42 · 443 阅读 · 0 评论 -
The C++ Programming Language 读书笔记(一)
最近在读《C++程序设计语言》,都说这本书是学习C++必读的书,而且目前读了几章收获也很大,因此决定每章写一篇读书笔记来记录所学。主要都是一些比较散的点。这一篇是“致读者”这一章的读书笔记。C与C++的异同 1. 在C++里几乎不需要用宏。用const和enum定义明显的常量,用inline避免函数调用的额外开销,用template去刻画一族函数或者类型,用namespace避免名字冲突。原创 2017-04-06 17:42:12 · 1445 阅读 · 0 评论 -
The C++ Programming Language 读书笔记(二)
这一篇是对“标准库概览”这一章的读书笔记。标准库提供了一些最常见的容器类型比如vector,list。标准容器及其基本操作都被设计成类似的。一般来说许多基本操作适用于各种类型的容器,举例来说,pushback()能用于将一个元素加到一个vector或一个list的最后。任何特定的迭代器也都是某个类型的对象。所有迭代器的共同之处在于他们的语义和有关操作的名字。例如对一个迭代器使用++操作,总产生引原创 2017-04-06 18:47:41 · 430 阅读 · 0 评论 -
C++之关联式容器
关联式容器不同于序列容器,在容器中每一个元素都有一个关键词,通过它可以找到相应的元素。 set:一种随机存取的容器,其关键词和数据元素是同一个值,不能够包含重复的元素。 multiset:可以包含重复的元素。 map:包含成对数值,一个是实际数据值,一个是用来寻找数据的关键词。一个关键词只能和一个元素对应。 multimap:一个关键词可以与多个元素对应。 map的插入:#include<原创 2017-09-06 15:22:05 · 271 阅读 · 0 评论 -
C++STL之序列容器
C++序列容器包含以下6种: 1.vector:一种随机访问的数组类型,它提供了对数组元素的快速,随机访问,以及在序列尾部快速,随机的插入和删除操作,vector的大小可变。 2.deque:一种随机访问的数组类型,提供了在序列两端快速插入和删除操作的功能,大小可变。 3.list:不支持随机访问,插入和删除操作所花时间固定,因为每个元素有前后指针。 4.queue:队列,先进先出。 5.原创 2017-09-06 15:00:06 · 292 阅读 · 0 评论 -
矩阵链相乘--动态规划
问题的陈述就省了,网上很多。 想谈一下动态规划和递归。先说递归,递归的核心是,将一个复杂的,规模庞大的问题,一步步的,把问题规模变小,直到问题简单到可以直接解决。 那么动态规划就更近一步,很多问题如果直接递归,那么往往会出现重复计算同一个值很多次的问题,这是一个很大的代价,因此,动态规划将记录子过程的计算结果,再需要的时候直接使用,避免了重复计算的问题,大大减小了代价。下面是矩阵链相乘的代码实现原创 2017-10-31 22:04:43 · 392 阅读 · 0 评论 -
一些基本算法--归并两个数组,二分查找
二分查找#include<iostream>using namespace std;int main(){ int a[10]={2,4,5,8,12,14,18,23,45,67};//只适用于已经排好序的数组的查找 int x=14; int high=9; int low=0; while(high>=low){ if(x>a[(high+low)/2])原创 2017-11-01 19:49:29 · 538 阅读 · 0 评论 -
剑指offer-数组中重复的数字
题目一 在一个长度为N的数组里所有数字都在0~n-1的范围内。请找出数组中任意一个重复的数字。例如,输入{2,3,1,0,2,5,3},则输出2或者输出3。思路 数组中所有数字都在0~n-1范围内。如果这个数组中没有重复的数字,那么当数组排序之后,数字i应该出现在下标为i的位置上。由于数组中有重复的数字,所以有些位置可能就有多个数字,而有些位置没有数字。代码#include<...原创 2018-03-17 17:08:46 · 208 阅读 · 0 评论 -
剑指offer-二维数组中的查找
题目 在一个二维数组中,每一行从左到右递增。每一列从上到下递增。输入一个二维数组和一个整数,判断数组中是否含有这个整数。 思路 每次和数组的右上角的数字比较,若要找的数比右上角的数字大,则排除右上角数字所在的行,若要找的数比右上角的数字小,则排除右上角数字所在的列。如此就可以一步步缩小范围。 代码实现#include<iostream>using namespace std;bool f原创 2018-03-18 10:40:24 · 343 阅读 · 0 评论 -
剑指offer--调整数组顺序
题目 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。 思路 维护两个指针,第一个指针初始化为指向数组的第一个数字,它只能往后移;第二个指针初始化为指向数组的最后一个数字,它只能往前移。在两个指针相遇之前,如果第一个指针指向的数字为偶数,并且第二个指针指向的数字为奇数,...原创 2018-05-22 10:55:03 · 304 阅读 · 0 评论