链表的题型和解题思路
1.链表中环的入口节点 首先判断头指针是不是空的然后需要判断这个链表中包不包含环:两个指针,一个一步一个两部,如果相遇,说明存在然后判断环节点的个数:从相遇的位置开始,往前走并计数,直到和自己再次相遇,得到个数然后找出入口节点:从头开始,俩...
1.链表中环的入口节点 首先判断头指针是不是空的然后需要判断这个链表中包不包含环:两个指针,一个一步一个两部,如果相遇,说明存在然后判断环节点的个数:从相遇的位置开始,往前走并计数,直到和自己再次相遇,得到个数然后找出入口节点:从头开始,俩...
一、常用的算法的时间复杂度和空间复杂度 二、算法的时间复杂度和空间复杂度合称为算法的复杂度。 1.时间复杂度 (1)时间频度 一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才能知道。但我们不可能也没有必要对每...
1、判断奇偶数 如果把一个数n以二进制数的形式表示的话,我们只需要判断最后一个二进制位是1还是0即可。如果是1,则代表奇数,否则为偶数。代码如下: if(n & 1 == 1){ // n是奇数 } 2、交换两个数 x = x ^ ...
1 引言 程序调用自身的编程技巧称为递归( recursion)。递归作为一种算法在程序设计语言中广泛应用。一个方法或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来...
动态规划算法(dynamic programming,简称 dp)似乎是一种很高深莫测的算法,你会在一些面试或算法书籍的高级技巧部分看到相关内容,什么状态转移方程,重叠子问题,最优子结构等高大上的词汇也可能让你望而却步。 而且,当你去看用动...
我认为双指针技巧还可以分为两类,一类是「快慢指针」,另一类是「左右指针」。前者解决主要解决链表中的问题,比如典型的判定链表中是否包含环;后者主要解决数组(或者字符串)中的问题,比如二分查找。 一、快慢指针的常见算法 快慢指针一般都初始化指向...
我周围的人几乎都认为二分查找很简单,但事实真的如此吗?二分查找真的很简单吗?并不简单。看看 knuth 大佬(发明 kmp 算法的那位)怎么说的: although the basic idea of binary search is co...
/* * 求n个数的中位数 - c - by chimomo * * 对于一组有有限个数的数据来说,它们的中位数是这样的一种数:这群数据里的一半的数据比它大,而另外一半数据比它小。 * 计算有限个数的数据的中位数的方法是:把所有的同类数...
写二叉树的程序时经常会遇到希望漂亮地把二叉树给输出,本文给出了一个小程序。 以下时打印的效果: // ag真人试玩娱乐 copyright @ l.j.shou jan.16, 2014 // a fancy binary tree printer #ifn...
1 前言 本章介绍迪杰斯特拉算法。和以往一样,本文会先对迪杰斯特拉算法的理论论知识进行介绍,然后给出c语言的实现。后续再分别给出c 和java版本的实现。 2 迪杰斯特拉算法介绍 迪杰斯特拉(dijkstra)算法是典型最短路径算法,用于...