随笔分类 -  剑指offer

上一页 1 2 3 4
剑指offer-面试题18-删除链表的节点-链表
摘要:/* 题目:给定单向链表的头指针和一个节点指针,定义一个函数在O(1)时间内删除该节点。 */ /* 思路: 将要删除的节点的下一个节点的value和next复制过来,删除下一个节点。 考虑两种特殊情况: 节点为尾结点,则需要从头遍历。 节点既是尾结点也是头结点,需要将头节点指向的内容置为空。 */ 阅读全文
posted @ 2019-11-17 16:09 笨宝宝 阅读(98) 评论(0) 推荐(0)
剑指offer-面试题17-打印从1到最大的n位数-数字
摘要:/* 题目: 输入数字n,按顺序打印从1到最大的n位十进制数。 如输入3,打印从1,2,3到999。 */ /* 思路: 大数问题转化为字符串或数组。 */ #include<iostream> #include<string.h> #include<algorithm> #include<cmat 阅读全文
posted @ 2019-11-14 21:19 笨宝宝 阅读(125) 评论(0) 推荐(0)
剑指offer-面试题16-数值的整数次方-数字
摘要:/* 题目: 实现函数double Power(double base,int exponent), 求base的exponent次方。 */ /* 思路: 本题需要考虑的情况较多: 1、0的负数次方报错。 2、判断double值为0,需要使用精度。 3、考虑exponent为负数的情况。 可创新的 阅读全文
posted @ 2019-11-14 20:00 笨宝宝 阅读(132) 评论(0) 推荐(0)
剑指offer-面试题15-二进制中1的个数-位运算
摘要:/* 题目: 二进制中1的个数,例如9为1001,有2位1. */ /* 思路: 算法2: 左移unsigned类型flag=1,和n做&运算,当flag移动中1的位置与n对应位置也为1时,则对应位置结果为1。 算法一直执行32次。 算法1: 假设数字1101,1101-1=1100 ,1100&1 阅读全文
posted @ 2019-11-12 22:28 笨宝宝 阅读(133) 评论(0) 推荐(0)
剑指offer-面试题14-剪绳子-贪婪算法
摘要:/* 题目: 给定一个长度为n的绳子,把绳子剪为m段,(n>1,m>1) 求各段绳子乘积的最大值。 */ /* 思路: 贪婪算法。 当绳子的长度大于5时,尽可能多的剪长度为3的绳子;当剩下的绳子长度为4时,把绳子剪为两段长度为2的绳子。 */ /* 证明: 当n>=5时,2(n-2)>n,3(n-3 阅读全文
posted @ 2019-11-12 21:58 笨宝宝 阅读(201) 评论(0) 推荐(0)
剑指offer-面试题14-剪绳子-动态规划法
摘要:/* 题目: 给定一个长度为n的绳子,把绳子剪为m段,(n>1,m>1) 求各段绳子乘积的最大值。 */ /* 思路: 动态规划。 f(n)=max(f(1)*f(n-1),f(2)*f(n-2),f(3)*f(n-3),...,f(n/2)*f(n-n/2))。 求最优解。 大问题可分解为若干个小 阅读全文
posted @ 2019-11-12 21:43 笨宝宝 阅读(138) 评论(0) 推荐(0)
剑指offer-面试题13-机器人的运动范围-递归法
摘要:/* 题目: 地上有一个m行n列的方格。一个机器人从坐标(0,0)的格子开始运动, 每次可向上、下、左、右移动一格,但不能进入行坐标和列坐标之和大于k的格子。 如,当k=18时,机器人能进入(35,37),因为3+5+3+7=18。 但不能进入(35,38),问机器人能够到达多少格子。 */ /* 阅读全文
posted @ 2019-11-12 20:59 笨宝宝 阅读(136) 评论(0) 推荐(0)
剑指offer-面试题12-矩阵中的路径-回溯法
摘要:/* 题目: 设计一个函数,判断一个矩阵中是否存在一条包含该字符串所有字符的路径。 路径可从字符串的任意一格开始,每一步可向上、下、左、右移动一格。 如果一条路径经过了矩阵中的某一格,那么该路径不能再次经过该格。 */ /* 思路: 采用回溯法。 遍历数组,当选中其中一个格子时,若与当前字符串的指定 阅读全文
posted @ 2019-11-11 21:54 笨宝宝 阅读(142) 评论(0) 推荐(0)
剑指offer-面试题11-旋转数组的最小数字-二分法
摘要:/* 题目: 把一个数组最开始的若干个元素搬到数组末尾,我们称之为数组的旋转。 输入一个递增排序的数组的旋转,输出旋转数组中的最小元素。 */ /* 思路: 采用二分的方法,旋转数组实质上是上左半部分为递减数组,右半部分为递增数组。 取中间元素mid,若大于等于最右端的元素,则说明mid在左半部分, 阅读全文
posted @ 2019-11-10 20:34 笨宝宝 阅读(91) 评论(0) 推荐(0)
剑指offer-基础练习-快速排序-排序
摘要:/* 题目:快速排序 */ /* 思路:将一个数组分为两份,左边的数字小于index,右边的数字大于index,递归划分后形成一个排序后的数组。 */ void QuickSort(int data[],int length,int start,int end){ if(start == end) 阅读全文
posted @ 2019-11-10 14:45 笨宝宝 阅读(188) 评论(0) 推荐(0)
剑指offer-面试题10-斐波那契数列-递归循环
摘要:/* 题目:求斐波那契数列的第n项 */ /* 思路: f(n) = 0 n=0, 1 n=1, f(n-1) + f(n-2) n>1 */ int Fibonacci(int n){ if(n < 0) return -1; if(n == 0 || n == 1) return n; int 阅读全文
posted @ 2019-11-09 13:39 笨宝宝 阅读(144) 评论(0) 推荐(0)
剑指offer-面试题9-用两个栈实现队列-栈和队列
摘要:/* 题目: 用两个栈实现一个队列。队列声明如下。 */ /* 思路: 将值压入stack1,再从stack1弹出到stack2,则为先进先出。 appendTail时直接压入stack1即可,当stack2没有可用于deleteHead的元素时,将stack1的元素全部压入stack2。 */ t 阅读全文
posted @ 2019-11-08 20:05 笨宝宝 阅读(107) 评论(0) 推荐(0)
剑指offer-面试题8-二叉树的下一个节点-二叉树
摘要:/* 题目: 给定一棵二叉树和其中一个节点,找出中序遍历的下一个节点。 */ /* 思路: 两种情况: 节点存在右子树:节点右子树的最左节点; 节点不存在右子树,节点向上一直找父节点或祖父节点,直到其父节点或祖父节点为其双亲节点的左子树,则next节点为父节点或祖父节点,若没有找到,则无next节点 阅读全文
posted @ 2019-11-08 19:09 笨宝宝 阅读(106) 评论(0) 推荐(0)
剑指offer-面试题7-重建二叉树-二叉树
摘要:/* 题目: 输入二叉树的前序遍历和中序遍历的结果,重建二叉树。假设输入的前序遍历和中序遍历的结果中不包含重复的数字。 */ /* 思路: 使用前序遍历找到根节点,再通过中序遍历找到左子树和右子树。 采用递归的方法建立。 */ struct BinaryTreeNode{ int value; Bi 阅读全文
posted @ 2019-11-06 22:06 笨宝宝 阅读(104) 评论(0) 推荐(0)
剑指offer-面试题6-从头到尾打印链表-链表
摘要:/* 题目: 输入一个链表的头节点,从尾到头反过来打印每个节点的值 */ /* 思路: 解法一:利用栈后进先出的特性。 解法二:利用递归函数的性质。 */ void PrintListReversingly_Iteratively(ListNode *pHead){ std::stack<ListN 阅读全文
posted @ 2019-11-06 20:59 笨宝宝 阅读(92) 评论(0) 推荐(0)
剑指offer-基础练习-增删节点-链表
摘要:/* 链表基本操作: 插入节点和删除节点 */ /* 思路: 使用指向链表的头指针,这样在新插入节点后,头指针不会改变 */ struct ListNode{ int value; ListNode* next; } void AddToTail(ListNode** pHead,int value 阅读全文
posted @ 2019-11-06 20:38 笨宝宝 阅读(110) 评论(0) 推荐(0)
剑指offer-面试题5-替换空格-字符串
摘要:/* 题目: 请实现一个函数,把字符串中的每个空格替换成'%20'. 例如输入“We are happy",则输出 ”We%20are%happy"。 */ /* 结题思路: 考虑给定数组内存足够,且不能开辟新的数组的情况。 使用两个指针,从后往前复制。 注意数组最后一个字符为'\0'。 */ vo 阅读全文
posted @ 2019-11-05 21:40 笨宝宝 阅读(106) 评论(0) 推荐(0)
剑指offer-面试题4-二维数组中的查找-数组
摘要:/* 题目: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。 请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 */ /* 解题思路: 从矩阵的右上角开始进行比较,将比较对象限定在左下角。 */ bool Find(int *m 阅读全文
posted @ 2019-11-05 20:24 笨宝宝 阅读(101) 评论(0) 推荐(0)

上一页 1 2 3 4