剑指offer-查找

题目 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 思路 重点说一下二分查找法。如果是在排序的数组(或者部分排序的数组)...

2018-03-21 11:26:21

阅读数 55

评论数 0

剑指offer-斐波那契数列

题目 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。 思路 递归不行,会超时,所以就用动态规划思想,利用一个数组来保存中间结果。#include<iostream> using namespace std; int Fibonacci(int n)...

2018-03-21 11:14:27

阅读数 53

评论数 0

剑指offer-二叉树的下一个节点

题目 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。 思路 根据中序遍历的特点,要找到一个节点的下一个节点无非就是三种情况:1、有右子树,这时只需要把其右孩子作为下一个遍历的(并不是要找的)节点,然后沿着...

2018-03-20 08:54:43

阅读数 41

评论数 0

剑指offer-重建二叉树

题目 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并输出它的后序遍历序列。 思路 先序遍历的第一个节点即为根...

2018-03-19 15:54:02

阅读数 54

评论数 0

剑指offer-从尾到头打印链表

题目 输入一个链表的头节点,从尾到头反过来打印出每个节点的值。 思路 直接用栈。 代码 struct ListNode { int m_nValue; ListNode*m_pNext; }; void PrintListReverse(ListNode*pHead)...

2018-03-19 10:35:04

阅读数 42

评论数 0

剑指offer-替换空格

题目 请实现一个函数,把字符串中的每个空格替换成“20%”。 思路 从后往前替换,这样可以减少移动次数。 在合并两个数组(包括字符串)时,如果从前往后复制每个数字,则会重复移动某些数字多次,那么就可以考虑从后往前复制。 代码 #include&amp;lt;iostream&a...

2018-03-18 13:48:56

阅读数 40

评论数 0

剑指offer-二维数组中的查找

题目 在一个二维数组中,每一行从左到右递增。每一列从上到下递增。输入一个二维数组和一个整数,判断数组中是否含有这个整数。 思路 每次和数组的右上角的数字比较,若要找的数比右上角的数字大,则排除右上角数字所在的行,若要找的数比右上角的数字小,则排除右上角数字所在的列。如此就可以一步步缩小范围。...

2018-03-18 10:40:24

阅读数 76

评论数 0

剑指offer-数组中重复的数字

题目一 在一个长度为N的数组里所有数字都在0~n-1的范围内。请找出数组中任意一个重复的数字。例如,输入{2,3,1,0,2,5,3},则输出2或者输出3。 思路 数组中所有数字都在0~n-1范围内。如果这个数组中没有重复的数字,那么当数组排序之后,数字i应该出现在下标为i的位置上。由于数组...

2018-03-17 17:08:46

阅读数 59

评论数 0

提示
确定要删除当前文章?
取消 删除
关闭
关闭