自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(59)
  • 资源 (1)
  • 问答 (4)
  • 收藏
  • 关注

原创 动态规划之三—— 从暴力递归到动态规划_数字字符串转字母字符串

根据题目描述可知:数字1~26 是有对应的字母与之对应的,但超过26的数字无法给出对应字母,表明给出的是一个无效字符。对于数字0,比较特殊,当它单独出现的时候,没有与之对应的字母,但是它的前面是1 或者2 时,合并组成的两位数10 和20 是有可以转化成对应字母的,当然大于2后(30 >26)又为无效。4. 当str[index+1] 没有越界,并且str[index] 与 str[index+1] 组成的两位数没有超过26, 则两这两个字符合并后,继续判断str[index+2];

2024-07-22 15:00:56 440 1

原创 动态规划之二—— 从暴力递归到动态规划_背包问题

所以做出这样的修改,当bag < 0 时,返回-1, 即一个错误值,然后每次选择“要”这个货物时,要预判一下如果“要了”这个货物是否会返回错误值,只有在返回值合法的情况的,才可以选择要这个index的货物。因为当bag == 0 时,但如果依然有货物,且货物的重量为0,但价值不为0,依然是可以放入背包的,因为根据题目要求,重量和价值仅仅是不为负,所以为零的可能性还是有的。(例图中 n == 3)1. 根据暴力递归可知,当index == 4,即index == W.size() 时, 返回值为0;

2024-07-22 15:00:08 626

原创 递归(五)—— 初识暴力递归之“如何利用递归实现栈逆序”

第五步:程序检查系统栈,进入getLast(stack_1{2,3}), 将返回值赋给last, 使last = 3, 程序继续执行到第8行,将result= 1 写入stack_1, 执行第9行,函数返回last值,并且销毁getLast(stack_1{2,3})的调用过程。程序再次进入reverse(stack_1)第五步,程序检查当前系统栈的情况,进入reverse(3),继续执行第13行代码 stack_1.push(last),将last = 1写入stack_1,退出 reverse(3);

2024-07-10 16:08:48 794

原创 递归(四)—— 初识暴力递归之“打印字符串的全排列”

index_0 index_0 ==> index_1 index_1 ==> index_2 index_2 之后,最近一次决策就是index_2 index_2, 因为它已经是最后一位,只有这一种决策,那么再回到这个决策的上一个决策,index_1 index_1,这个决策是有不同分支的,index_1 index_2 , 按照这条新路径继续走下去,直到最后一位。所以,当判断到index_i index_j 两个交换位的字符相同,则会推出交换。

2024-07-10 11:03:05 683

原创 递归(三)—— 初识暴力递归之“字符串的全部子序列”

1. 每一个子串都隐含了各个字符的存在情况,比如表2中的子序列3 == ”c“, 其实用真值表值来表示的话,它就是0010, 第3位为1,表示c存在,其他位为0,表示不存在,也就是说我们遍历,产生子序列的时候,是对原字符串的每个字符都会遍历到的,只是选择它在子序列中存在或不存在。我们给出的初始状态是各位都不存在,那么对于str[2] 来说,str[0~1] 不存在是确定的,是不可更改的事实,但是str[2]可选择,可以是不存在,例如子序列1;补充问题:打印一个字符串的全部子序列,要求不出现重复子序列。

2024-07-05 16:08:44 907

原创 递归(二)—— 初识暴力递归

函数leftToRight 就是按照冰箱三步法的思路写的,当n == 1时,表示只有一个盘子,不用纠结,直接放到目的地最右侧即可,当n>1 时,将1~n-1的盘子放到中间柱子,即函数leftToMid, 然后将第n个盘子放在最后侧,最后将中间柱子上的盘子放在最右侧,函数midToRight。汉诺塔是典型的利用递归思想解决的问题。假设当前的汉诺塔是3层,叠放在最左边的柱子上,目标是大小顺序不变的叠放在最右边的柱子上。-1 移到辅助柱子,此时的辅助柱子是左侧柱子,此时需要midToLeft函数,第二部,将第。

2024-07-02 23:25:38 1013

原创 递归(一)——用“单步调试法”来理解递归调用过程

此时的栈顶是findMax(0,1), 那么就重建函数findMax(0,1)执行过程,等待接收返回值是 findMax(0,1) 的max_r, 即max_r = 7, 此时的行号是9 ,继续往下执行第10行语句:return max_l>max_r?此时的栈顶是findMax(0,1), 那么就重建函数findMax(0,1)的执行过程,等待接收返回值的是 findMax(0,1) 的max_l, 即max_l = 4, 此时的行号是8 ,就会继续往下执行第9行语句。max_l:max_r, 返回7.

2024-06-27 10:19:46 705

原创 全数字的乘积

1. keep数组的作用,是为了呼应题目描述中的“有些乘积可能从多个乘法等式中等到,但在求和的时候只计算一次” 这个条件,即一个c值只能出现一次。因为我们已经 设定 了 a < b 这个前提条件,所以,根据表格所示,a最大只能是 两位数,而b 最大可能是4位数。4) 为了满足 a的位数 + b的位数 + c的位数 = 9, 我们就要知道如何计算一个数的位数。3) a、b、c 的位数分别是多少?1)这是一道枚举类型的题目,枚举 a * b = c, 并判断a ,b,c是否符合题目要求;

2024-06-24 17:47:03 501

原创 一个整数使用英文表达的字母计数

arr2[0] 表示一个数字的十位上0, arr2[1], 表示一个数字的十位上1, 但是经过分析英文单词的特点,已经将10~19 初始化到arr1 中,所以如果当前数字的十位上是0 或1 ,我们就去arr1去找对应的值,arr2 就从arr[2] 开始设置初始值。通过这个表格可以看到,1~19 的英文单词是没有规律的,但是21~29, 31~39 是有规律的,分别是20 + 1~9, 30+1~9,以此类推,41~49,51~59 ,直到91~99,都是对应的十位数加上个位数,这似乎就是一个规律了。

2024-06-23 17:50:00 654

原创 最长考拉兹序列

增加keep数组的大小是可以提高程序的运行时间的,但keep数组不是越大越好,因为keep是用于搜索查询的,而数据在计算机中是按页存储的,,如果keep数组太大,那么将会开辟多个页用于存储数据,在搜素查询所需数据时,就会将时间用在页面切换上,反而增加了时间的开销。这两段迭代过程是有重复的,当i= 13 时,序列10 之后的迭代过程在 i = 10 时已经计算过了,所以如果i = 13时, len = 1 + 1+ 1 + 7 就可以得出结果,所需要的前期操作只是把 i=10 时的len值记录保存下来。

2024-06-23 10:47:37 878 1

原创 最小公倍数的求法

如果我们想证明 gcd(b, a%b ) 得到的就是最大公约数,那么只要证明 b 和 (a%b)除了c之外再无公约数即可,又因为b = cy, a%b = c(x-ky) , 即只要能能证明 y 和 (x-ky)互为素数即可。通过定理的表述,我们发现,问题规模从[b,a] 缩小到了为了[b, a%b],即问题规模从原始规模缩小到了原始规模的子规模,但是问题的解没有变,也就是说,子规模中蕴含着原始问题的解。设 a和b 的最大公约数 为c :即 c = gcd(a,b), 则: a = cx, b = cy;

2024-06-19 20:55:18 471

原创 哥德巴赫的另一个猜想

此外,还有一个等价的版本,即任一大于2的偶数都可以表示为两个素数之和,这通常被称为“强哥德巴赫猜想”或“关于偶数的哥德巴赫猜想”1966年,中国数学家陈景润证明了“1+2”成立,即“任一充分大的偶数都可以表示成二个素数的和,或是一个素数和一个半素数的和”。在数学领域,猜想是指那些被提出但尚未经过严格证明的命题,它们可能是正确的,也可能是错误的,也可能仍然在验证的过程中。例如,当前遍历到的素数是7, 我们标记的就是7 加上 1到N 区间内的所有值的平方的2倍,每个奇合数可以写成一个素数和一个平方的两倍之和。

2024-06-16 01:55:01 838

原创 如何计算可截素数

由于素筛法的时间复杂度是O(log(log(n))) ,而线筛法的时间复杂度可以达到O(n), 当数据规模不大时,二者的程序运行效率的差异是不明显的,但当数据规模非常庞大的时候,线筛法更优。它本身是一个素数,如果从左往右逐一截去数字,剩下的仍然都是素数,如果从右往左逐一截去数字,剩下的也仍然都是素数。3797 的最高位是3,3的权重是1000, 所以 3797。797的最高位是7,7的权重是100,所以797。97 的最高位是9,9的权重是10,所以97。从右往左截去数字:379,37,3 都是素数。

2024-06-14 13:58:50 240

原创 异或运算在面试题中的应用

例如在代码段1中,交换数组a[i] 和a[j] 的值 , a[i] 可以等于 a[j] (a[i] == a[j] == X),但是 i 不可以等于j,因为,如果 i== j , a[i] ^ a[j]因为ans 要求除了a的最右侧的1保留,其它位上都为0, 而一个数与它的相反数做“与”操作,结果就是0,但是最右侧的1被保留,就说明除了最右侧1这一位,其它位都是与其相反数做了“与”操作,因此 (~a+1)就是使a的最右侧1这一位在与反后,又被置成了1.在对应位上,相同为0,不同1,但其实。

2024-06-14 00:54:50 808 2

原创 “圆周素数”算法题解析

根据上一篇文章,我们知道可以利用素筛法或者线性筛法得到小于100万的所有素数值,所以,这道题目的核心问题就是如何将素数进行逐位轮转,最后一步就是将每次逐位轮转所得到数据通过素筛表,进行查表判断其是否为素数。将一个数字循环右移一位,即:其十位上的数字右移一位,成为个位上的数字,百位上的数字右移一位成为个位上的数字,依次右移,而原本个位上的数字移到最高位。这个问题等价于求N的10进制表示的数字位数。小于100的圆周素数一共有13个:2,3,5,7,11,13,17,31,37,71,73,79和97.

2024-06-12 14:27:34 311

原创 质数(素数)的几种判断方法

如果使用素筛法时,参见代码段6的init_prime() 函数,当i = 2,3,5时,30都会被标记一次,但是线筛法的思想是,找到最小素因子2所对应的因子15,用15*2 标记出30,因为15是30的最大因子,是30的对后一个因式,是i值循环加加的过程中,最后一次得到30的机会,用来标记30,30的有且一次的标记机会。当前质数为2时,标记2的倍数,6被标记了一次,当执行到质数3时,6作为3的倍数,又被标记了一次,所以,6被标记了2次。30存在的质数因子为:2,3,5,所以,它将被标记3次。

2024-06-12 13:09:57 758

原创 LeedCode_4: 寻找两个正序数组的中位数

题目:给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。算法的时间复杂度应该为 O(log (m+n)) 。示例 1:输入:nums1 = [1,3], nums2 = [2]输出:2.00000解释:合并数组 = [1,2,3] ,中位数 2示例 2:输入:nums1 = [1,2], nums2 = [3,4]输出:2.50000解释:合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5

2022-12-04 17:31:10 100 1

原创 leedCode_2:两数相加

题目:给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例1输入:l1 = [2,4,3], l2 = [5,6,4]输出:[7,0,8]解释:342 + 465 = 807.示例2输入:l1 = [0], l2 = [0]输出:[0]示例3输入:l1 = [9,9,9,9,9,9,9], l2 = [9

2022-12-04 12:42:56 108

原创 leedCode_1:两数之和

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。基本思路与方法一是一样的,即默认num[i] 为构成target的加数之一,查找target-nums[i] 是否也存在于nums中。如果X也在nums中,且index不等于i, 则找到了目标数据,返回i及X在nums中的index。假设target由数组中的nums[i] 与未知数X构成,target = nums[i] +X,你可以按任意顺序返回答案。

2022-09-30 02:25:11 275

原创 X11/Xlib.h 的安装--ubuntu20.04

在ubuntu中使用X window 构建窗口时,若在编译过程中提示X11/Xlib.h :没有该文件或目录。 则可能是没有安装libX11, 在终端执行如下指令:sudo apt-get install libX11-dev#include <stdlib.h>#include <stdio.h>#include <X11/Xlib.h>int main(){ return 0;}...

2021-05-13 17:50:57 4969

原创 Emscripten编译环境安装(ubuntu20.04)

1. 使用终端安装各类工具$ sudo apt upate$ sudo apt install openssh-server git curl eget tar unzip$ sudo apt install build-essential ptyhon cmake default-jre // 默认安装的是python 2.72. 使用git ,从github上clone 源$git clone https://github.com/juj/emsdk.git // 会在当前路径下

2021-05-13 14:34:24 1581 2

原创 ubuntun 20.04 常用软件安装

1. 安装vimsudo apt-get install vim-gtk2. 安装git//输入以下指令1 后出现暂停,按回车继续1. sudo add-apt-repository ppa:git-core/ppa2. sudo apt-get update3. sudo apt-get install git3. 安装百度云//1.打开网址 http://pan.baidu.com///2.点击客户端下载:选择linux (deb格式)//3.下载完成后,进入安装包

2021-05-13 12:09:50 578

原创 ubuntu20.04 在图型界面使用正确的用户名和密码登录失败的解决方案

ubuntu20.04 在图型界面使用正确的用户名和密码登录失败的解决方案使用正确的用户名和密码,但出现如下图1的提示:解决方案如下: 切换到命令行界面: 快捷键:Ctrl+Alt+F6 输入用户名root以及root的密码登录 安装desktop sudo apt-get install ubuntu-desktop 重启,在终端输入 reboot 如果第3步报错,提示‘sudo’命令无法识别,则因该时配置文件中的环境变量被修改,这也.

2021-04-21 10:11:47 6599 5

原创 linux修改环境变量的方法

linux修改环境变量的方法例如,当前/usr/bin这个路径不在系统环境中,因此此路径下的命令无法使用修改环境变量的方法有三种://第一种//显示当前环境变量内容echo $PATA//修改环境变量,将/usr/bin 加入到环境变量中export PATA=/usr/bin:$PATA//注:此时/usr/bin下的命令就可以使用了,但是此方法为在命令行内写入环境变量,为临时修改,并非永久的修改了环境变量的配置文件,当电脑重启后,此修改不会被保存。//第二种,修改用户自己的环境变

2021-04-21 09:55:53 5554

原创 使c++程序崩溃的原因

使c++程序奔溃的原因总结:空指针void emptyPointer(){ cout << __FUNCTION__ << " " << __LINE__ << endl; int* p = NULL; *p = 5; cout << *p << endl;}2. 数组越界void ArrayBounds(){ cout << __FUNCTION__ << " " <&

2021-03-30 14:57:16 1254 1

原创 error: duplicate symbol:

报错截图:报错原因:在声明LogClock::StartLogClock() 和 LogClock::EndLogClock() 的头文件中,这两个函数的实现写在了类外,应该在类的内部写函数的实现体。//错误代码:LogClock.h#ifndef _LOGCLOCK_H_#define _LOGCLOCK_H_#include <time.h>#include <string>#include <iostream>using std::strin

2021-03-29 14:04:34 1376

原创 C++ Primer 读书笔记-uint 1

uint 11.2初始输入输出iostream 库,包含两个基础类型 istream 和ostream,分别表示输入流和输出流,一个流就是一个字符序列。“流”想要表达的是,随着时间的推移,字符是顺序生成或消耗的。1.2.1标准输入输出对象cincoutcerr:输出警告和错误信息;clog:用来输出程序运行时的一般性信息;1.2.2 向流写入数据输出运算符<<: 接受两个运算对象, 左侧的运算对象必须是一个ostream对象, 右侧的运算对象是要打印的值。输出运算符的计算结果就

2021-02-18 13:40:44 292

原创 Python代码通过SSH实现远程文件上传、下载以及指令传递

需要使用库paramikoimport paramiko # 用于SSHimport os 文件传输1.1 在目标主机上创建文件夹def MakeFilePathOnBench(ip,port_number,user_name,private_key): ssh = paramiko.SSHClient() ssh.set_missing_host_key_po...

2019-11-27 18:33:17 1544

原创 c++(VS2015) 调用静态链接库

@[c++(VS2015) 调用静态链接库]调用自己编写的静态链接库在一个工程中使用自己编写的静态链接库需要对工程的属性做设置和修改。设置lib库的头文件所在路径设置lib库所在路径设置要导入哪个lib库...

2019-08-08 17:52:21 1128

原创 动态链接库的调用

#include <iostream>#include <windows.h> //调用相关库函数和某些特殊变量typedef void (*DLLFunc)(int,int); //函数指针,确定调用函数的形参int main(){ DLLFunc dllFunc; HINSTANCE hInstLibrary = ...

2019-07-29 17:58:52 189

原创 数据结构学习笔记 ---- 栈

1.1 栈和队的基本概念1.1.1 栈的基本概念栈的定义 栈是只能在一段进行数据插入和删除的线性表。允许进行数据插入和删除的一端称为栈顶(top),栈顶由一个成为栈顶指针的位置指示器来表示,是动态变化的。表的另一端成为栈底,是固定不变的。插入数据和删除数据被称为入栈和出栈。 2. 栈的特点 栈的特点是先进后出。栈的数据形态就好比是叠放成一列的盘子,最先...

2019-07-24 19:27:07 616

原创 C++main()函数知识点

1. c/c++在main函数之前和之后会做什么?底层汇编代码:int stack; //初始化栈;int heap; //初始化堆open stdin; //打开标准输入open stdout; //打开标准输出open stder; //打开错误流...push argv; //把参数argv压入栈push argc; //把...

2019-07-12 10:59:27 3512

原创 git 指令学习笔记

↵1. 当前状态查询git status2. 代码分支切换git checkout banchpath3. git pull4. 添加文件git add filePathgit add *5. 撤销添加文件的操作git add HEAD #如果HEAD后面什么都不见,则会撤销上一次add操作的所有文件;git add HEAD filepath #仅...

2019-07-08 18:33:32 105

原创 CMakeLists 学习笔记2

三. 常用变量1. 预定义变量PROJECT_SOURCE_DIR #工程的根目录PROJECT_BINARY_DIR #运行cmake命令的目录,通常是${PROJECT_SOURCE_DIR}/buildPROJECT_NAME #返回通多project命令定义的项目名称CMAKE_CURRENT_SOURCE_DIR #当前处理的CMakeLists.txt所在的路径...

2019-07-08 15:16:38 457

原创 CMakeLists.txt 学习笔记1

一. Cmake 简介二. 常用指令1. 指定需要的最小的cmake版本cmake_minimum_required(VERSION 3.4.0)此命令是optional,如果CMakeLists.txt中使用了特定版本中才具备的命令,就需要加上这个行,提醒用户升级到了较高版本之后在执行cmake。2. 设置项目名称project(projectName)此命令是o...

2019-07-04 17:12:53 140

原创 How to use google test for c++ -- visual studio 2015

The googleTest environment set up as follow:Download the googleTestThe load path is https://github.com/google/googletest/tree/release-1.8.0The file storage path is D:\Ford_SDK_Test\gtest\googlet...

2019-06-17 13:06:25 343

原创 vc2008: 控制台程序将数据写入MySql(数据库信息从配置文件读取)

1.      安装mySql (5.5.25)c:\Program Files 登陆密码设为1234; 2.      创建win32 控制台程序 在工程中添加使用mysql的必要头文件,这些头文件在mysql的按照路径下:C:\Program Files\MySQL\MySQL Server5.5\includeMy_alloc.hMy_list.hMy

2015-11-02 15:48:36 1091

转载 C++ string 转化为LPCTSTR

LPCTSTR不是一个类型,而是两种类型:LPCSTR和LPCWSTR其中之一。会根据你当前程序是否使用UNICODE字符集来变成那二者之一。如果使用UNICODE字符集,则LPCTSTR = LPCWSTR,否则LPCTSTR = LPCSTR。 标准库的std::string转换成LPCSTR很简单:直接调用c_str()即可。例:std::string a="abc"

2015-11-02 15:35:36 20268

原创 vc2008 操作excel 和ppt (插入图片)

一. vc2008实现打开指定excel文件,在指定位置插入图片1: 新建一个基于对话框的工程2:在类视图里点击添加新类3:如下图,选中“TypeLib 中的MFC类”:4:根据所按安装的office版本,添加EXCEl所对应的库添加接口,可根据需要选择性的添加,也可以全部添加,每一个被选择的接口都会生成一个.h 文件所生

2015-09-23 17:00:14 2086 3

原创 vc2010调试:“当前不命中断点”(附加进程)

测试条件:        通过附加进程的方式调试dll。问题:当添加进程后,设置的断点显示无效。解决:1:         2: 3:4:如果以上步骤 仍然不能解决问题,那此时就重启计算机。5:发现问题有所变化,断点显示有效,但是程序在断点处并没有停下来,继续执行了。

2015-03-26 19:38:15 5760

OPC Server

一款小巧的OPC Server软件,绿色软件无需按照,是做OPC通信的好帮手。

2013-11-15

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

TA关注的人

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