![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
编程思想
文章平均质量分 59
Three_ST
学习者
展开
-
数据结构与算法之LeetCode-828. 统计子串中的唯一字符 - 力扣
设字符c位于[left, right]中的idx且c唯一, 那么c出现的次数为它左边包含它的个数乘它右边包含它的个数 [即(idx + 1 - left) * (right + 1 - left)]。所以我们只需要统计每个字符出现的所有间隔坐标即可。原创 2022-10-21 21:53:11 · 340 阅读 · 0 评论 -
LeetCode-1404 将二进制表示减到1的步骤数
1404. 将二进制表示减到 1 的步骤数给你一个以二进制形式表示的数字 s 。请你返回按下述规则将其减少到 1 所需要的步骤数:如果当前数字为偶数,则将其除以 2 。如果当前数字为奇数,则将其加上 1 。题目保证你总是可以按上述规则将测试用例变为 1 。numberProcess(num){ }...原创 2021-11-29 23:13:51 · 178 阅读 · 0 评论 -
数据结构与算法之LRU缓存算法
LRU是什么LRU(Least recently used,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”。LRU作为页面置换算法,常见的页面置换算法如下常见的页面置换算法有如下几种:LRU 最近最久未使用FIFO 先进先出置换算法 类似队列OPT 最佳置换算法 (理想中存在的)NRU Clock置换算法LFU 最少使用置换算法PBA 页面缓冲算法最常见的实现是使用一个链表保存缓存数据,详细算法实现如下新数据原创 2021-05-15 18:18:36 · 569 阅读 · 0 评论 -
编译原理学习教程之-引论(第一章)
1.引论完成语言翻译工作的软件系统称为编译器(compiler)1.1 语言处理器一个编译器就是一个程序解释器(interpreter)是另一种常见的语言处理器,它并不通过翻译的方式生成目标程序,从用户角度看,解释器直接利用用户提供的输入执行源程序中指定的操作。链接器(linker)能够解决外部内存地址的问题加载器(loader)把所有的可执行目标文件放到内存中1.2 编译器结构分析(analysis)把源程序分解为多个组成要素,并在这些要素之上加上语法结构综合(syhthesis)根据中原创 2020-08-29 10:52:00 · 875 阅读 · 0 评论 -
设计模式学习之设计模式总览
Design Pattern个人学习笔记-来自C语言中文网设计模式是一套反复使用,多数人知晓、经过分类编目、代码设计经验的总结,1995年由GoF在《设计模式:可复用面向对象软件的基础》(Design Patterns: Elements of Reusable Object-Oriented Software)一书中提出设计模式的优点:可以提高程序员的思维能力、编程能力和设计能力。...转载 2020-05-05 20:35:03 · 272 阅读 · 0 评论 -
数据结构算法-迭代与递归
巧妙的利用BFS实现递归题目来自LeetCode257.二叉树的所有路径给定一个二叉树,返回所有从根节点到叶子节点的路径。说明: 叶子节点是指没有子节点的节点。示例:输入: 1 / \2 3 \ 5输出: ["1->2->5", "1->3"]解释: 所有根节点到叶子节点的路径为: 1->2->5, 1->3...转载 2019-12-09 11:34:07 · 219 阅读 · 0 评论 -
数据结构与算法基础知识-背包九讲.pdf 动态规划-资料下载
学习过程的一个记录,关于背包问题链接:https://pan.baidu.com/s/1Vf-JalOWJUMfh1_8ZIBytA提取码:xfri原创 2019-08-21 11:07:44 · 494 阅读 · 0 评论 -
数据结构与算法-剑指Offer系列(21)调整数组顺序使奇数位于偶数前面-Java实现
题目21调整数组顺序使奇数位于偶数前面题目描述:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。解题思路:不考虑时间复杂度,最简单的思路是从头到尾扫描数组,每碰到一个偶数拿出这个数字,并把位于这个数字后面的所有数字往前挪动一位。挪动后数组末尾存在一个空位。这个时候把该偶数放入这个空位,由于碰到一个偶数需要移动O(...原创 2019-08-25 22:52:21 · 246 阅读 · 0 评论 -
数据结构与算法-剑指Offer系列(22)链表中倒数第K个节点-Java实现
代码的鲁棒性Robust-程序能够判断输入是否合乎规范要求,并对不符合要求的输入予以合理的处理容错性是鲁棒性的一个重要体现提高鲁棒性的有效途径是进行预防性编程-指预见在什么地方会出现问题。题目22:链表中倒数第K个节点题目描述:输入一个链表,输出该链表中倒数第k个结点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾结点是倒数第1个结点。例如一个链表有6个结点,从头结点...原创 2019-08-25 23:37:52 · 146 阅读 · 0 评论 -
数据结构与算法-剑指Offer系列(14)二进制中的1的个数-Java实现
位运算位运算就是把数字用二进制表示之后,对每一位上的0或者1的运算。与(&) 0&0=0 0&1=0 1&1=1 或(|) 0|0=0 1|0=1 1|1=1 异或(^) 1^0=1 0^1=1 1^1=0 题目14:二进制中1的个数题目描述:请实现一个函数,输入一个整数,输出该数二进...原创 2019-08-21 22:56:08 · 148 阅读 · 0 评论 -
数据结构与算法-剑指Offer系列(15)数值的整数次方 -Java实现
高质量的代码代码的规范性:清晰地书写、清晰地布局、合理的命名 代码的完整性:功能测试、边界测试、负面测试第15题 数值的整数次方题目描述:实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。题目分析:自以为简单的解法:直接不考虑边界输出(输入的指数小于0或者为负数)...原创 2019-08-22 22:36:28 · 115 阅读 · 0 评论 -
数据结构与算法-剑指Offer系列(16)打印从1到最大的0位数 -Java实现
题目16:打印从1到最大的n位数题目描述: 输入数字n,按顺序打印出从1最大的n位十进制数。比如输入3,则打印出1、2、3一直到最大的3位数即999。题目分析:跳进面试官的陷进:利用for循环从1到n输出:在字符串上模拟数字加法的解法:模拟一个大叔最容易想到的是使用字符串或者数组表示大数。一是在字符串表达的数字上模拟加法; 二是把字符串表达的数字打印出来把问题转换成数...原创 2019-08-22 23:46:08 · 105 阅读 · 0 评论 -
数据结构与算法-剑指Offer系列(18)删除链表的重复节点-Java实现
题目18:删除链表中的重复的节点题目描述:在一个排序的链表中,如何删除重复的节点?解题思路:第一步确定是删除函数的参数,这个函数需要输入待删除链表的头节点,头结点可能与后面的节点重复,也就是说头结点也可能被删除,因此删除函数声明DeleteDuplicatedNode(ListNode pHead) 接下来遍历整个链表,如果当前节点(pNode)的值与下一个节点值相同,那么它就是...原创 2019-08-23 13:32:40 · 124 阅读 · 0 评论 -
数据结构与算法-剑指Offer系列(23)链表中环的入口节点-Java实现
题目23:链表中环的入口节点题目描述:一个链表中包含环,如何找出环的入口结点?例如,在图3.8的链表中,环的入口结点是结点3。解题思路:解决这个问题第一步是确定链表带有环。定义两个指针,一个一次一步,另一个一次两步,如果走得快的追上走得慢的,那么久包含环,如果没有追上那么就不包含;第二步是找到环的入口,同样利用两个指针来解决,p1和p2,如果链表中环有n个节点,则指针P1先在链...原创 2019-08-27 00:00:41 · 101 阅读 · 0 评论 -
数据结构与算法-剑指Offer系列(27) 二叉树的镜像-Java实现
第四章 解决问题的思路画图让抽象问题形象化题目27 二叉树的镜像题目描述:请完成一个函数,输入一个二叉树,该函数输出它的镜像。解题思路:树的根节点相同,但它们的左右两个子节点交换了位置,交换了根节点后,还需要交换左右子节点1、先前序遍历这颗树的每个节点,2、如果遍历到的节点有子节点,就交换它的两个子节点。3、当交换万所有非子结点的左右字数后,就得到树的镜像代...原创 2019-08-30 23:04:58 · 111 阅读 · 0 评论 -
数据结构与算法-剑指Offer系列(29) 顺时针打印数组-Java实现
题目29:顺时针打印数组题目描述:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。题目分析:利用图形思考,得出循环条件是columns>start*2并且rows>startY*2代码实现:package swordToOffer;public class Num29_PrintMartixClockwise { //输入一个矩阵,按照从...原创 2019-09-29 10:15:57 · 161 阅读 · 0 评论 -
数据结构与算法-剑指Offer系列(13)剪绳子-Java实现
动态规划与贪婪算法动态规划是现在 编程面试的热门话题,如果面试题是求一个问题的最优解(最大值或者最小值),而且该问题呢广告分解成若干个子问题,并且子问题之间还有重叠的子问题,就可以考虑动态规划。应用动态规划需要能够把大问题分解成小问题,分解的小问题也存在最优解。把小问题的最优解组合起来就能到的问题的最优解。求各个子问题的最优解是第一特点 整体的最优解依赖于子问题的最优解是第二特点 ...原创 2019-08-20 21:03:11 · 130 阅读 · 0 评论 -
数据结构与算法-剑指Offer系列(12)机器人的运动范围-Java实现
题目12:机器人的运动范围题目描述:地上有一个m行n列的方格。一个机器人从坐标(0, 0)的格子开始移动,它每一次可以向左、右、上、下移动一格,但不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格(35, 37),因为3+5+3+7=18。但它不能进入方格(35, 38),因为3+5+3+8=19。请问该机器人能够到达多少个格子?题目分析:本题11...原创 2019-08-20 16:30:57 · 126 阅读 · 0 评论 -
数据结构算法之-递归
在看了数据结构与算法后,很重要的一步就是不断地刷题理解这些数据结构,但是一遇到递归的时候,就会感觉力不从心。在网上看了一些教程后,由于天资愚钝,还是不太理解,因此想写一个博客记录一下这个过程。在网上看到的解决递归的问题一般是分三步走:递归的终止条件:何时停止递归调用 本次递归要做什么:递归需要实现什么功能 返回值是什么:返回什么内容不知道有没有和我一样的纠结每次递归调用结果的,可能我...原创 2019-08-11 20:18:38 · 261 阅读 · 0 评论 -
数据结构与算法之常用排序算法-Java JavaScript实现
排序算法在一些算法 思想中会经常使用到下面就对一些常用的排序算法做一个记录,常见的排序算法可以分为:0 排序基础知识0.1 排序分类比较类排序:通过比较来决定元素的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。非比较类排序:不通过比较来确定元素的次序,可以突破基于比较的时间下界,时间是线性的。因此也叫线性时间非比较排序0.2 时间空间...原创 2019-08-19 00:00:31 · 217 阅读 · 0 评论 -
数据结构与算法-剑指Offer系列(1)找出数组中重复的数字-Java实现
本节是剑指offer的学习记录教程第一题题目1:找出数组中重复的数字描述:在一个长度为n的数组里的所有数字都在0到n-1的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。例如,如果输入长度为7的数组{2, 3, 1, 0, 2, 5, 3},那么对应的输出是重复的数字2或者3。思路:可以利用哈希表+重新排布数组...原创 2019-08-19 09:45:30 · 221 阅读 · 0 评论 -
数据结构与算法-剑指Offer系列(2)不修改数组找出重复的数字-Java实现
题目2-不修改数组找出重复的数字描述:在一个长度为n+1的数组里的所有数字都在1到n的范围内,所以数组中至少有一个数字是重复的。请找出数组中任意一个重复的数字,但不能修改输入的数组。例如,如果输入长度为8的数组{2, 3, 5, 4, 3, 2, 6, 7},那么对应的输出是重复的数字2或者3。思路:1、使用辅助数组实现上面的功能,但是需要额外的空间O(n),数组下标与数字对应。...原创 2019-08-19 10:31:11 · 177 阅读 · 0 评论 -
数据结构与算法-剑指Offer系列(3)二维数组中的查找-Java实现
题目3:二维数组中的查找题目描述:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。解题思路:首先选取数组中右上角的数字,如果该数字等于要查找的数组, 则查找过程结束; 如果该数字大于要查找的数字,则删除这个数字所在的列; 如果该数字小于要查找的数字,则剔除这个数...原创 2019-08-19 11:28:52 · 85 阅读 · 0 评论 -
数据结构与算法-剑指Offer系列(4)替换空格-Java实现
处理字符串的问题题目4:替换空格题目描述:请实现一个函数,把字符串中的每个空格替换成"%20"。例如输入“We are happy.”,则输出“We%20are%20happy.”。算法思想:1、如果 从前往后,每次扫描到一个空格,替换为%20的话,那么每次替换后数组都要往后移位(O(n^2));2、先遍历一次数组,统计出字符串中的空格总数,每替换一个空格,长度增加2,因此...原创 2019-08-19 13:39:38 · 123 阅读 · 0 评论 -
数据结构与算法-剑指Offer系列(5)从头到尾打印链表-Java实现
题目6:从头带我打印链表题目描述:输入一个链表的头结点,从尾到头反过来打印出每个结点的值。节点如下定义:解题思路:遍历是从头到尾,但是输出是从尾到头,也就是第一个遍历的节点最后输出,最后一个节点第一个输出,典型的“后进先出-LIFO“,可以用栈实现这种顺序。每经过一个节点的时候,把该节点放到一个栈中,当遍历完整个链表后,再从栈顶输出每个节点的值。代码如下: public ...原创 2019-08-19 14:59:13 · 128 阅读 · 0 评论 -
数据结构与算法-剑指Offer系列(6)重建二叉树-Java实现
题目6:重建二叉树题目描述:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2, 4, 7, 3, 5, 6, 8}和中序遍历序列{4, 7, 2, 1, 5, 3, 8, 6},则重建出其二叉树并输出它的头结点。解题思路:在二叉树的前序遍历序列中, 第一个数字总是树的根节点的值,在中序遍历...原创 2019-08-19 16:04:24 · 94 阅读 · 0 评论 -
数据结构与算法-剑指Offer系列(7)二叉树的下一个节点-Java实现
题目7 二叉树的下一个节点题目描述: 给定一棵二叉树和其中的一个结点,如何找出中序遍历顺序的下一个结点?树中的结点除了有两个分别指向左右子结点的指针以外,还有一个指向父结点的指针。题目分析:若一个节点有右子树,那么它的下一个节点就是它的右子树中最左节点,也就是从右子节点出发一直沿着指向左子节点; 若一个节点没有右子节点,同时它是父节点的左子节点,那么它的下一节点就是父节点; ...原创 2019-08-22 23:46:33 · 126 阅读 · 0 评论 -
Java数据结构与算法之图-图-最小生成树-拓扑排序
本节参考《Java数据结构与算法》 第二版本节主要内容:图介绍 搜索 最小生成树 有向图的拓扑顺序 有向图的连通性1、图介绍图是与树有些类似的数据结构,实际上从数学意义上,树是图的一种,然而在计算机程序设计中,图的应用方式与树不同。图通常有一个固定的形状,这是由物理或者抽象问题决定的。例如:图中节点表示城市,边可以表示城市间的班机路线。另一个更抽象的例子是一个...原创 2019-08-10 16:25:56 · 794 阅读 · 0 评论 -
数据结构与算法-剑指Offer系列(8)用两个栈实现队列-Java实现
栈是常见的数据结构,比如说操作系统会给每个线程创建一个栈用来存储函数调用时的各个函数的参数,返回地址及临时变量;栈的特点是先进后出(FILO),栈不考虑排序,需要O(n)找到最大或者最小的数;队列的特点是先进先出,即第一个进入队列的元素将会第一个出来。题目8:用两个栈实现队列题目描述:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail和deleteHe...原创 2019-08-20 08:56:28 · 149 阅读 · 0 评论 -
数据结构与算法-剑指Offer系列(9)斐波那契数列(Fibonacci)-青蛙跳台问题-Java实现
递归与循环在函数求解中会经常使用,但是各自有各自的优缺点递归:代码小,但是不优化的话时间空间占用较大题目9:斐波那契数列问题描述:写一个函数,输入n,求斐波那契(Fibonacci)数列的第n项。解题思路:常规解法,按照递推公式,f(n) = f(n-1)+f(n-2)实现递归,但是会出现就很多重复计算节点; 实用解法:将计算的的结果保存下来,下次计算时调用即可; ...原创 2019-08-20 10:38:05 · 195 阅读 · 0 评论 -
数据结构与算法-剑指Offer系列(19)正则表达式匹配-Java实现
题目19:正则表达式匹配题目描述:请实现一个函数用来匹配包含'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(含0次)。在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但与"aa.a"及"ab*a"均不匹配。解题思路:每次从字符串中拿出一个字符和模式中的字符去匹配,...原创 2019-08-23 22:21:02 · 137 阅读 · 0 评论 -
数据结构与算法-剑指Offer系列(10)旋转数组的最小数字-Java实现
查找和排序查找和排序在程序设计中经常用到,如果遇到在排序数组或者(部分排序数组)中查找一个数字 或者统计某个数字出现的次数,那么可以尝试二分查找。哈希表主要优点能够在O(1)的时间内找到某一元素;排序较查找复杂一些,常用的排序算法总结,可以查看我的另一篇 数据结构与算法之常用排序算法-Java JavaScript实现题目11:旋转数组的最小数字题目描述:把一个数组最开始的...原创 2019-08-20 13:44:55 · 137 阅读 · 0 评论 -
数据结构与算法-剑指Offer系列(11)矩阵中的路径-Java实现
回溯法:可以看做蛮力法的升级版,他从解决问的每一步所有可能系统的选择一个可行的方法,回溯法适合多个步骤组成的问题,并且每个步骤有多个选项,当我们在某一步选择了其中一个选项 时,就进入下一步,然后又面临新的选择,如此重复,直到达到最终状态。回溯法可能解决问题的可能可以用树状结构表示。题目11:矩阵中的路径题目描述:请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字...原创 2019-08-20 15:20:43 · 115 阅读 · 0 评论 -
数据结构与算法-剑指Offer系列(20)表示数值的字符串-Java实现
题目19:表示数值的字符串题目描述: 请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串“+100”、“5e2”、“-123”、“3.1416”及“-1E-16”都表示数值,但“12e”、“1a3.14”、“1.2.3”、“+-5”及“12e+5.4”都不是。题目分析:表示数字的字符串遵循模式A[.[B]][e|EC]或者.B[e|EC],其中A为数值的整数部...原创 2019-08-24 11:59:25 · 213 阅读 · 0 评论 -
编程珠玑-学习心得-算法设计技术
第九章-代码调优1、顺序搜索提高效率的高层次方法:问题定义、系统结构、算法设计、数据结构选择低层次方法:代码调优-首先确定程序中开销较大的部分。C中取模运算大约需要100ns,其他算数运算10nsk=(j+rotdist)%n;修改为k=j+rotdist;if(k>n){ k-=n;}问题3:顺序搜素int ssearch(t) {...原创 2019-08-03 23:35:09 · 344 阅读 · 0 评论