自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(23)
  • 收藏
  • 关注

转载 算法学习 动态规划解题框架

动态规划原文地址动态规划的一般形式就是求最值动态规划其实是运筹学的一种最优化方法,只不过在计算机问题上应用比较多,比如说让你求最长递增子序列呀,最小编辑距离等等。动态规划核心既然是要求最值,核心问题是什么呢?求解动态规划的核心问题是穷举。因为要求最值,肯定要把所有可行的答案穷举出来,然后在其中找最值呗。动态规划三要素重叠子问题:在穷举的过程中往往会有许多重复子问题,导致效率极其低下。所以需要备忘录和DP table来优化穷举结构。最优子结构:一定要具备最优子结构(子问题相互独立),才可

2020-06-30 10:04:35 411

原创 Effective C++ 读书笔记(3.资源管理)

条款13:以对象管理资源假设我们使用一个类来表示投资行为,各式各样的投资类型继承自一个root class Investment:class Investment{...};通过一个工厂函数供应我们的Investment对象:Inverstment* CreateInvestment();调用createInvestment的对象后,有责任删除之。用一个f函数:void f(){ Inverstment * pInv=CreateInvestment(); ... delete p

2020-06-27 16:47:39 106

原创 剑指Offer 面试题13:机器人的运动范围

面试题13:机器人的运动范围地上有一个m行n列的方格,一个机器人从0,0开始移动,上下左右都可以移动,但不能进入航坐标和列坐标数位之和大于k的格子。思路回溯法递归终止条件:超出边界,超出位数之和k辅助参数:二维表判断是否已经访问,引用参数计数递归:向当前访问节点的四个方向扩展#include "stdafx.h"#include <string>void MovingCountCore(int threshold, int rows, int cols, int row, i

2020-06-27 11:52:28 129

原创 剑指Offer 面试题12:矩阵中的路径

面试题12:矩阵中的路径题目:设计一个函数,判断在一个矩阵中是否存在一条路径包含字符串所有字符。每一步可以向上下左右移动,但不能重复经过同一个位置。思路1.依次遍历每一个元素,找到与字符串相匹配的开头,就进入匹配函数2.匹配函数需要有一个栈(递归)存放已经匹配好的字符,需要一个二维数组来表示哪些位置已经被访问过了,如果当前访问的节点四周都不符合要求,那么回溯到上一个状态。涉及知识盲点&注意点memset(hasArrived, 0, cols*rows);memset 函数是内存赋值函数

2020-06-27 09:53:42 91

原创 剑指Offer 面试题11:旋转数组的最小数字

面试题11:旋转数组的最小数字题目:把一个数组的若干元素搬到数组末尾,我们称之为数组的旋转。输入一个递增的数组的旋转,输出数组中的最小元素。

2020-06-26 10:16:27 87

原创 快速排序c++实现

题目:用c++实现快速排序首先需要实现Partion函数:在数组中随机取一个数,将数组根据小于和大于这个数分成左右两部分。实现Swap函数,实现数组中两个位置的数交换位置。实现RandInRange,实现在start到end下标之间的数中取一个随机数。实现QuickSort函数,二分调用Partion。 ...

2020-06-25 14:46:01 306

原创 Effective C++ 读书笔记(2.构造、析构、赋值运算)

条款05:了解C++默认编写并调用哪些函数编译器会为一个空类声明:copy构造函数、copy assignment操作符和一个析构函数,如果你没有声明任何构造函数则编译器会为你声明一个default构造函数。

2020-06-24 18:39:52 153

原创 剑指Offer 面试题10:斐波那级数(青蛙跳台阶)

斐波那级数题目:求斐波那级数的第n项//fn= 0 ,n=0;// 1 ,n=1;// f(n-1)+f(n-2) ,n>1;递归用辅助内存迭代#include "stdafx.h"int Fibonacci_Solution1(int n){ if (n < 0) return-1; if (n == 0) return 0; if (n == 1) return 1; return Fibonacci_Solution1(n -

2020-06-21 20:45:55 111

原创 剑指Offer 面试题9:用两个栈实现队列

面试题9:用两个栈实现队列实现队列的push和pop功能两个链表:push将元素压入s2中,一旦需要pop:如果s1中为空那么将s2中的全部元素压入s1中再进行pop s1操作;如果s1不为空那么直接pop s1Myqueue.h#pragma once#include <stack>using namespace std;template<typename T> class Myqueue {public: Myqueue(void); ~Myqueue(vo

2020-06-21 19:55:16 130

原创 类模板的分离式编译导致LNK2019

类模板的声明和编译最好放在同一个头文件中那么如果硬要分离式编译会发生什么?Myqueue类头文件#pragma once#include <stack>using namespace std;template<typename T> class Myqueue {public: Myqueue(void); ~Myqueue(void); void push(const T& value); T pop();private: stack<T&

2020-06-21 19:47:15 178

原创 *剑指Offer 面试题8:二叉树的下一个节点

面试题8:二叉树的下一个节点题目:给定一棵二叉树和其中一个节点,如何找出中序遍历序列的下一个节点?树中有两个分别指向左、右子节点的指针,还有一个指向父节点的指针。思路1.判断是否有右节点 如果有:那下一个节点就是右节点的最左子节点如果没有:那么返回找父节点,第一个右父节点就是下一个节点;既没有右节点又没有右父节点那么就没有下一个节点#include "stdafx.h"struct BinaryTreeNode{ int m_nValue; BinaryTreeNode *m_pLef

2020-06-21 16:52:50 99

原创 剑指Offer 面试题7:重建二叉树

面试题7:重建二叉树题目:输入二叉树中序遍历和前序遍历的结果,请重建二叉树。不含有重复的数字思路从前序遍历得到根节点,再在中序遍历中找到这个根节点将中序遍历和前序遍历分为左右两个子节点数组,再调用递归重复以前的操作#include "stdafx.h"#include "BinarryTree.h"#include <exception>using namespace std;BinaryTreeNode* Construct_Recursively(int *preor

2020-06-19 20:30:06 93

原创 c++ 问题:查找预编译头时遇到意外的文件结尾

在添加其他文件的.h和.cpp到当前项目后运行,编译器提示:在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include"stdafx.h"”?错误分析: 此错误发生的原因是编译器在寻找预编译指示头文件(默认#include"stdafx.h")时,文件未预期结束。没有找到预编译指示信息的头文件"stdafx.h"。 因为工程中的每个cpp文件属性默认都是使用预编译头(/YU)的,但是添加的第三方文件并没有 #include "stdafx.h"预编译指示头,所以编译器在此cpp文件中一

2020-06-19 13:53:25 1933

原创 剑指Offer 面试题6:从尾到头打印链表

面试题6:从尾到头打印链表题目:输入一个列表的头结点,从尾到头答应出每个节点的值思路用栈一个一个存入,再从栈中取出打印递归本质上就是一个栈#include "stdafx.h"#include "List.h"#include <stack>#include <iostream>void PrintListNode(ListNode*pnode);void PrintListReversingly_Iteratively(ListNode*pHead)

2020-06-19 13:53:07 123

原创 Effective C++ 读书笔记(1.让自己习惯C++)

条款01:视C++为一个语言联邦CObject-Oriented C++Template C++STL条款02:尽量以const,enum,inline替换#define(宁可以编译器替换预处理器)如果宏不是在你自己所写的文件里,将会变得难以追踪,所使用的名称可能没有进入记号表(symbol table)*解决之道:*用一个常量替换上述的宏。有两种特殊情况:定义常量指针(constant pointers)由于常量定义式通常放在头文件里面,有必要将指针声明为const。若要在头

2020-06-19 09:51:16 76

原创 Effective C++ 读书笔记(0.导读)

术语声明式(declaration):告诉编译器某个东西的名称和类型,但略去细节。定义式(definition):提供编译器一些声明式所遗漏的细节。初始化(initialization):“给予”对象初值的过程。default构造函数:可被调用二不带任何实参,要不是没有参数,就是每个参数都有缺省值。explicit前缀:阻止被用来执行隐式数据类型转换,然仍然可以显示转换。class A{public: A();//default构造函数 explicit A(int x=0,bool

2020-06-19 09:50:12 107

原创 c++Primer读书笔记(第一章 开始)

#1.2初识输入输出4个io对象cincoutcerr:输出警告或这错误信息clog:输出程序运行时的一般信息##1.4.3读取数量不定的输入数据// An highlighted block#include <iostream>int main(){ int sum=0; int value=0; while(std::cin>>value)//遇到文件结束符或者输入错误结束循环 sum+=value; std::cout<<"sum

2020-06-18 19:20:56 63

原创 c++Primer读书笔记(第二章 变量和基本类型)

2.1基本内置类型带符号

2020-06-18 19:18:50 108

原创 剑指Offer 单向链表实现

单向链表实现单向链表节点结构体#pragma oncestruct ListNode { int m_nValue; ListNode * m_pNext;};单向链表函数功能实现#include "List.h"#include <exception>#include<iostream>using namespace std;ListNode * CreateListNode(int value){ ListNode*newNode = n

2020-06-18 15:12:07 75

原创 剑指Offer 面试题5:替换空格

面试题5:替换空格题目:请实现一个函数,把字符串中的每个空格替换成“%20”。例如,输入“We are happy.”则输出“We%20are%20happy”思路先计算所有空格数,然后按照所有空格数的数量实现计算出最后一个字符所在位置,再从后往前遍历用两个指针复制字符,如果遇到空格就将代替字符写入,直到两个指针相等。#include "stdafx.h"#include <string>void ReplaceBlank(char *string, unsigned in

2020-06-18 14:23:58 108

原创 剑指Offer 面试题4:二维数组中的查找

面试题4:二维数组中的查找题目:在一个二维数组中,每一行都按照从左到右递增,每一列也按照从上到下递增,输入一个这样的二维数组和一个整数,判断数组中是否有这个数思路:以整个可搜索趋于的左下角数字为判定基准,如果等于那么返回true,如果小于,那么当前列向右推进一列,如果大于,当前行向上推进一行,直至行和列超出范围值结束循环#include "stdafx.h"bool Find(int * matrix, int cols, int rows, int Num){ if (matrix

2020-06-18 09:42:19 143

原创 剑指Offer 面试题3:数组中重复的数字

面试题3:数组中重复的数字题目:在一个长度为n的数组所有数字都在0~n-1中,某些数字是重复的,某些数字不重复,判断是否有重复的数字,找出任意重复的数字。思路:1. 暴力遍历:o(n平方)2. 先排序,排序后顺序遍历数组就可以找到重复的数字 o(nlogn)3. 哈希表,遍历依次放入哈希表 时间o(1) 空间 o(n)4. 因为所有元素都在0—n-1中,所以我们每遍历一个元素就把它和等于元素值的下标中的元素互换,让它“归位”,如果遍历到一个数和该数位置上的数一样,那么就重复了。#incl

2020-06-17 21:43:16 121

原创 剑指Offer 面试题1:赋值运算函数符

面试题1:赋值运算符函数题目:如下类型CMyString的声明,请为该类型添加赋值运算符操作考虑要点:返回*this 这样才可以连续赋值 s1=s2=s3传入参数类型申明为常量引用,可以避免值传递再次调用拷贝构造函数在分配新内存之前是否释放实例自身的内存,如果你没有将之前的内存归还而分配了新的内存,那么之前的内存将会泄漏当赋值操作是实例自身的时候直接返回*this,避免释放自身内存后导致严重问题#pragma warning(disable:4996)#include "stdafx.h

2020-06-17 15:14:41 88

空空如也

空空如也

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

TA关注的人

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