算法与数据结构
~青~
这个作者很懒,什么都没留下…
展开
-
剑指offer18:删除链表的节点
题目:在O(1)时间内删除链表结点,给定单向链表的头指针和一个节点指针,定义一个函数在O(1)时间内删除该节点。 思路: ①如果该节点不是尾节点,那么可以直接将下一个节点的值赋给该节点,然后令该节点指向下下个节点。在删除下一个节点,时间复杂度O(1) ②否则,就需要先遍历链表,找到节点的前一个节点,然后让前一个节点指向null,时间复杂度为O(N) 代码如下 public ListNode del...原创 2019-10-23 15:18:19 · 159 阅读 · 0 评论 -
剑指offer21:调整数组顺序使奇数位于偶数全面
题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。 思路: ①不考虑时间复杂度,最简单思路可以从前往后扫描这个数组,碰到一个偶数,则取 出来,并把位于这个数字后面的所有数字往前移一位。在数组的末尾有一个空位,这 就可以将偶数放入这个空位。(该解法的时间复杂度为O(N*...原创 2019-10-23 15:08:30 · 120 阅读 · 0 评论 -
剑指offer15:二进制中1的个数
题目:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 思路 :n : 10110100 n-1 : 10110011 n&(n-1) : 10110000 把一个整数减去1,再和原整数做位与运算,会把整数的最右边的1变成0。 那么一个整数的二进制表示中有多少个1,就可以进行多少次这样的操作。 该算法的时间复杂度...原创 2019-10-22 12:50:35 · 183 阅读 · 0 评论 -
剑指offer10:斐波那契数列
题目:大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项 思路:考虑到第 i 项只与第 i-1 和第 i-2 项有关,因此只需要存储前两项的值就 能求解第 i 项,从而将空间复杂度由 O(N) 降低为 O(1)。 首先根据f(0)和f(1)算出f(2),在根据f(1)和f(2)算出f(3).....以此类推就可以算出 第N项。这种思路的时间复杂度为O(n). ...原创 2019-10-18 20:05:27 · 138 阅读 · 0 评论 -
剑指offer9:用两个栈实现队列
题目:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。 本题思路很简单:知道栈是先进后出,队列是先进先出。就可以利用两个栈实现队列 in 栈用来处理入栈(push)操作,out 栈用来处理出栈(pop)操作。一个元素进入 in 栈之后,出栈的顺序被反转。当元素要出栈时,需要先进入 out 栈,此时元素出栈顺序 再一次被反转,因此出栈顺序就和最开始入栈顺序...原创 2019-10-17 13:57:18 · 133 阅读 · 0 评论 -
剑指offer6:从尾到头打印链表
题目:输入一个链表,按链表从尾到头的顺序返回一个ArrayList。 本题有四种解题方法:①使用栈;②使用递归;③使用Collections.reverse();④使用头插法 在这里我使用①和③去解题 1、根据栈先进后出可以知道,我们将链表的数压进去后,再取出来就可以完成节点顺序的反转。 代码如下: public ArrayList<Integer> printListFromT...原创 2019-10-16 15:58:08 · 102 阅读 · 0 评论 -
剑指offer5:替换空格
题目:请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy 本题的思路 ①先遍历一次字符串,统计出字符串空格的总数,并计算出替换后的字符串的总长度。 ②从字符串的后面复制和替换。准备双指针:p1和p2。 p1指向原始字符串的末尾,p2指向替换之后的字符串的末尾 简单的说:在字符串尾部...原创 2019-10-16 11:13:43 · 119 阅读 · 0 评论 -
剑指offer4:二维数组中的查找
二维数组中的查找 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序 排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二 维数组和一个整数,判断数组中是否含有该整数。 解题思路:首先选取数组右上角的数字。如果该数字等于要查找的数字,则查找过程 结束;返回true;如果该数字大于要查找的数字,则剔除这个数字所在的列;如果该 数字小于要查...原创 2019-10-15 20:40:49 · 101 阅读 · 0 评论 -
剑指offer22:链表中倒数第K个节点
输入一个链表,输出该链表中倒数第k个结点。 该题可以想到有两种思路解答,先分析:题目给的是单链表,单向链表的节点,只有 从前往后的指针而没有从后往前的指针。所以不能从后找到倒数第K个节点 ①假设这个链表有N个节点,那么倒数第K个节点就是从头节点开始的第(n-k+1)个节点 但是这种方法需要遍历链表两次,第一次统计出链表中节点的个数,第二次就能找到 倒数第K个节点。 **但第一种不是最优...原创 2019-10-15 17:07:20 · 170 阅读 · 0 评论 -
剑指offer67:把字符串转换成整数
剑指offer67:把字符串转换成整数 这题我的理解是 ①判断字符串是否为空或者长度为零,如果为零,那好办直接返回一个空值。 ②判断字符串的第一个符号是否为“0”.str.charAt(0) == '-'. ③设置一个ret变量来接收字符串转换成整型。ret=0 ④开始循环遍历该字符串。从0开始。在位置为零还需要判断该字符串是不是一个合法的数值。如果是则继续循环下去。在从1开始循环的位置判断...原创 2019-10-15 15:37:49 · 162 阅读 · 0 评论