剑指offer算法思想

3. 数组中重复的数字

算法步骤:遍历该数组nums,从第一个数字开始,判断

1)如果nums[i]和下标的值i一样,就跳到下一个数字

2)如果不一样,那么就判断,nums[i]是否等于nums[nums[i]],如果等于,输出该数字nums[下标值],

如果不等于,那么就调整nums[i]和nums[nums[i]]的顺序。继续重复1)和2)

4. 二维数组中的查找

算法步骤:

1)获取行数rows和列数cols

2)确定从第一行r和最后一列c开始,即从右上角开始

3)while循环,行数r<=rows-1&&c>=0

4)如果target等于matric[r][c],直接输出答案。如果target大于matric[r][c],行r增加,如果target小于matric[r][c],列减少,c--。

5. 替换空格

算法步骤:

1)得到原长度下标p1

2)然后遍历字符串里面的空格,如果是有空格,那么在这个字符串后面加多两个空格,最终是为了得到替代之后的字符长度数量下标p2

3)while(p1>=0&&p2>p1),获取p1下标的值c,并且从右往左遍历完,如果c为空格,那么就往该字符串的P2 指向的位置依次填充 02%,如果不是空格,就直接添加c

6. 从尾到头打印链表

算法思路:

1)往栈加数据

2)设置一个集合Arraylist

3)出栈,并且把数据加到该集合中

9. 用两个栈实现队列

算法思路:

1)设立两个栈,一个负责传入in,一个负责出栈out

2)入栈方法,就是使用in添加数据

3)出栈方法:

①如果out为空,那么我们就要判断in是否为空,如果不为空,那么我们就取出in的数据,传入out栈

②如果经过上述处理,out还为空,那么就输出queue为空

③return out.pop()

原文地址:https://www.cnblogs.com/lpd1/p/10540516.html

时间: 2024-08-01 14:04:18

剑指offer算法思想的相关文章

剑指offer算法总结

剑指offer算法学习总结 节选剑指offer比较经典和巧妙的一些题目,以便复习使用.一部分题目给出了完整代码,一部分题目比较简单直接给出思路.但是不保证我说的思路都是正确的,个人对算法也不是特别在行,只不过这本书的算法多看了几遍多做了几遍多了点心得体会.于是想总结一下.如果有错误也希望能指出,谢谢. 具体代码可以参考我的GitHub仓库: https://github.com/h2pl/SwordToOffer 数论和数字规律 从1到n整数中1出现的次数 题目描述 求出1~13的整数中1出现的

剑指offer—算法之位运算(二进制中1的个数)

位运算: 左移:m<<n将m左移n位,左移后低位补充0: 右移:m>>n将m右移n位,右移后高位补充的是符号位,负数补充1,整数补充0.(正数的边界值为(1,ox7FFFFFFF),负数的边界值为(ox80000000,oxFFFFFFFF)) 题目一:请实现一个函数,输入一个整数,输出这个数的二进制表示中1的个数. 思路一:将二进制数i与1相与,判断是否为1,然后将tag=1左移一位得到tag=2,然后再与i相与,循环结束的条件是tag==0:该算法的时间复杂度为输入的i的位数.

剑指offer算法_位运算求和

不用+,-,*,/运算求和,可以分成三步: 1.计算两个数字的异或值,相当于只计算每一位的和,不计算进位,得出结果sum: 2.计算两个数字的与值,相当于求出两个数字的进位,然后左移一位,相当于进位,得出结果jw: 3.求sum和jw的和,步骤与1,2相同,直到进位jw==0停止计算: 扩展: 不申请额外内存实现两个变量值得交换: 方法一: 通过异或来实现: a=a^b; b=a^b; a=a^b; 方法二: 通过加减运算实现: a=a+b; b=a-b; a=a-b;

剑指offer算法编程题目部分汇总(解法略)

总结一下本书中遇到的大部分面试题.面试题3:二维数组中的查找 题目:在一个二维数组中,每一行都按照从左到右的递增顺序排列,每一列都按照从上到下递增的顺序排列,请完成一个函数,输入这样的一个整数,判断数组中是否含有该整数. 面试题4:替换空格 题目:请实现一个函数,把字符串中的每个空格替换成%20. 面试题5:从尾到头打印链表 题目:输入一个链表的头结点,从尾到头反过来打印每个结点的值. 面试题6:重建二叉树 题目:输入某二叉树前序遍历和中序遍历的结果,请重建出该二叉树.假设节点没有重复的. 面试

整理剑指offer&mdash;链表操作

在链表中找到第一个含有某值的节点并删除该节点. 在这里我创建的链表里,头节点是不包含有效数据的,它只是起一个辅助作用,真正的链表数据从首节点开始. typedef struct Node{    int data; //数据域    struct Node * pNext; //指针域}NODE, *PNODE; 1: void RemoveNode(PNODE pHead, int val) 2: { 3: if(pHead == NULL || pHead->pNext == NULL) 4

剑指Offer——Trie树(字典树)

剑指Offer--Trie树(字典树) Trie树 Trie树,即字典树,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种.典型应用是统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计.它的优点是:最大限度地减少无谓的字符串比较,查询效率比哈希表高. Trie的核心思想是空间换时间.利用字符串的公共前缀来降低查询时间的开销以达到提高效率的目的. Trie树也有它的缺点,Trie树的内存消耗非常大.当然,或许用左儿子右兄弟的方法建树的话,可能会好点.可见,优

剑指OFFER之从上往下打印二叉树(九度OJ1523)

题目描述: 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 输入: 输入可能包含多个测试样例,输入以EOF结束.对于每个测试案例,输入的第一行一个整数n(1<=n<=1000, :n代表将要输入的二叉树元素的个数(节点从1开始编号).接下来一行有n个数字,代表第i个二叉树节点的元素的值.接下来有n行,每行有一个字母Ci.Ci='d'表示第i个节点有两子孩子,紧接着是左孩子编号和右孩子编号.Ci='l'表示第i个节点有一个左孩子,紧接着是左孩子的编号.Ci='r'表示第i个节点有一个右孩

剑指OFFER之调整数组顺序使奇数位于偶数前面找(九度OJ1516)

题目描述: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. 输入: 每个输入文件包含一组测试案例.对于每个测试案例,第一行输入一个n,代表该数组中数字的个数.接下来的一行输入n个整数.代表数组中的n个数. 输出: 对应每个测试案例,输入一行n个数字,代表调整后的数组.注意,数字和数字之间用一个空格隔开,最后一个数字后面没有空格. 样例输入: 5 1 2 3 4 5 样例输

剑指Offer——当当+搜狐+好未来笔试题+知识点总结

剑指Offer--当当+搜狐+好未来笔试题+知识点总结 情景回顾 时间:2016.9.21 15:00-21:00 地点:山东省网络环境智能计算技术重点实验室 事件:当当笔试.搜狐笔试.好未来笔试 3场笔试中好未来相对简单点. 好未来编程题 马踏棋盘(贪心算法) ??马踏棋盘是经典的程序设计问题之一,主要的解决方案有两种:一种是基于深度优先搜索的方法,另一种是基于贪婪算法的方法.第一种基于深度优先搜索(DFS)的方法是比较常用的算法,深度优先搜索算法也是数据结构中的经典算法之一,主要是采用递归的