xinran0703
码龄16年
关注
提问 私信
  • 博客:86,223
    社区:5,316
    问答:25,515
    117,054
    总访问量
  • 51
    原创
  • 60,272
    排名
  • 206
    粉丝
  • 0
    铁粉
  • 学习成就
IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:上海市
  • 加入CSDN时间: 2008-11-21
博客简介:

xinran0703的专栏

查看详细资料
  • 原力等级
    成就
    当前等级
    3
    当前总分
    291
    当月
    1
个人成就
  • 获得259次点赞
  • 内容获得16次评论
  • 获得299次收藏
  • 代码片获得503次分享
创作历程
  • 16篇
    2024年
  • 3篇
    2022年
  • 8篇
    2021年
  • 9篇
    2019年
  • 4篇
    2015年
  • 2篇
    2014年
  • 1篇
    2013年
  • 6篇
    2012年
  • 10篇
    2011年
成就勋章
TA的专栏
  • leedcode
    3篇
  • Emscripten
    2篇
  • OpenGL
  • c++primer 读书笔记
    1篇
  • linux学习
    5篇
  • 电子书下载
  • C++
    16篇
  • VC学习
    12篇
  • VB
  • VC2008
    1篇
  • cmake
    1篇
  • git
    1篇
  • Python
    1篇
  • 数据结构
    3篇
兴趣领域 设置
  • 人工智能
    机器学习深度学习tensorflow数据分析
创作活动更多

如何做好一份技术文档?

无论你是技术大神还是初涉此领域的新手,都欢迎分享你的宝贵经验、独到见解与创新方法,为技术传播之路点亮明灯!

178人参与 去创作
  • 最近
  • 文章
  • 代码仓
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

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

根据题目描述可知:数字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 ·
477 阅读 ·
5 点赞 ·
1 评论 ·
6 收藏

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

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

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

第五步:程序检查系统栈,进入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 ·
887 阅读 ·
8 点赞 ·
0 评论 ·
10 收藏

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

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 ·
762 阅读 ·
15 点赞 ·
0 评论 ·
15 收藏

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

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

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

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

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

此时的栈顶是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 ·
784 阅读 ·
15 点赞 ·
0 评论 ·
10 收藏

全数字的乘积

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 ·
522 阅读 ·
8 点赞 ·
0 评论 ·
7 收藏

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

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 ·
745 阅读 ·
17 点赞 ·
0 评论 ·
14 收藏

最长考拉兹序列

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

最小公倍数的求法

如果我们想证明 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 ·
582 阅读 ·
5 点赞 ·
0 评论 ·
4 收藏

哥德巴赫的另一个猜想

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

如何计算可截素数

由于素筛法的时间复杂度是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 ·
273 阅读 ·
6 点赞 ·
0 评论 ·
6 收藏

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

例如在代码段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 ·
841 阅读 ·
26 点赞 ·
2 评论 ·
27 收藏

“圆周素数”算法题解析

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

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

如果使用素筛法时,参见代码段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 ·
1370 阅读 ·
25 点赞 ·
0 评论 ·
20 收藏

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 ·
124 阅读 ·
0 点赞 ·
1 评论 ·
0 收藏

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 ·
130 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

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 ·
301 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

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 ·
5233 阅读 ·
0 点赞 ·
0 评论 ·
4 收藏
加载更多