剑指offer
剑指offer
汪汪要努力呀
这个作者很懒,什么都没留下…
展开
-
【剑指offer】——和为s的序列
文章目录1、和为s的两个数字2、和为s的连续正数序列1、和为s的两个数字1、题目要求输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可。示例1:输入:nums = [2,7,11,15], target = 9输出:[2,7] 或者 [7,2]示例2:输入:nums = [10,26,30,31,47,60], target = 40输出:[10,30] 或者 [30,10]限制:1 <= nums.原创 2020-07-02 09:42:00 · 372 阅读 · 0 评论 -
【剑指offer】——关于数组的简单题练习
1、调整数组顺序使奇数位于偶数前面2、在排序数组中查找数字|3、0~n-1中缺失的数字原创 2020-07-01 11:03:06 · 170 阅读 · 0 评论 -
【剑指offer】——根据位运算求解的问题
一、二进制中1的个数二、数组中数字出现的次数三、数组中唯一只出现一次的数字四、不用加减乘除做加法原创 2020-06-27 09:26:58 · 177 阅读 · 0 评论 -
【剑指offer】——旋转数组最小数、次数超过一半的数、最小的k个数
1、旋转数组的最小数字1.1题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。输入:[3,4,5,1,2]输出:1输入:[2,2,2,0,1]输出:01.2方法一——排序思路:采用最简单易懂的方式,先将数组排序,再取得第一个数字即可。但是这种方法就失去了旋转数组的特性。代码实现:int minArray(v原创 2020-06-19 11:13:37 · 290 阅读 · 0 评论 -
【剑指offer】——实现特定的库函数pow、atoi、itoa
1、pow函数2、基础atoi函数3、atoi函数进阶版4、itoa函数原创 2020-04-09 12:57:47 · 328 阅读 · 0 评论 -
【剑指offer】——由斐波拉契数列引发的递归循环问题
文章目录01斐波拉契数列02跳台阶问题03变态跳台阶04矩形覆盖05兔子繁殖问题01斐波拉契数列题目描述思路:斐波拉切的公式为:F(0) = 0;F(1) = 1;F(n) = F(n-1)+F(n-2);(n>=2)方法一:用递归解决。但是用递归的话系统会报错说调用的层次太多,因为递归的时间复杂度是O(2^n)是指数级别的,效率太低,一般不使用int Fibonacci(...原创 2020-03-06 14:47:11 · 292 阅读 · 0 评论 -
【剑指offer】——数组中重复的数字、二维数组的查找、替换空格
文章目录1、数组中重复的数字2、二维数组中的查找3、替换空格4、从尾到头打印链表1、数组中重复的数字1.1题目描述在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。1.2示例输入:[2, 3, 1, 0, 2, 5, 3]输出:2 或 32<= n<= 1000001.3方法一解题思路:采用暴力法用两个for循环来加以实现。外层f原创 2020-06-18 08:10:20 · 238 阅读 · 0 评论 -
【算法】——排列树
有这样一个问题,比如说,让我们去求数列br={1,2,3}的所有子集。我们知道它的真子集有{1,2,3}、{1,2}、{1,3}、{2,3}、{1}、{2}、{3}、空集。一共八个。那我们怎么通过代码的方式实现它呢?首先,我们来分析这样一个程序,如下:int fun(int i, int n){ if (i >= n) { } else { fun(++i, n);//一...原创 2020-03-07 13:54:21 · 1387 阅读 · 1 评论 -
【程序员面试宝典】——第五章
运算符问题第一题下面程序的结果是多少?#include<iostream>using namespace std;int main(){ unsigned char a = 0xA5; unsigned char b =~a>>4+1; cout<<b; return 0;}答案:250问题分析:本题涉及了运算...原创 2020-02-06 15:19:04 · 225 阅读 · 0 评论 -
给定一个整数N,求其N!末尾有多少个0
给定一个整数N,求其N!末尾有多少个0? 例如:N=10,N!=3628800,N!末尾有两个0解析:10!为=1x2x3x4x5x6x7x8x9x10其中2x5=10, 1x10=10,10X10=100,末尾两个0.15!=1x2x3x4x5x6x7x8x9x10x11x12x13x14x15其中4x5=10, 1x10=10,2x15=30,10X10x30=3000,末尾3个0...原创 2019-03-17 23:06:12 · 1944 阅读 · 0 评论 -
字符串排序
用数组指针实现字符串排序关于排序问题想必大家再熟悉不过了,什么冒泡排序、选择排序和快速排序等等,但是当提及字符串的排序的时候,我们又怎么做来实现呢?如下我们就来分几个层面探讨一番!一、如何定义数组指针?我们定义一个char *arr[10],因为【】的优先级高于char *,所以该定义代表的是存放指针的数组。二、如何交换如图所示:该数组中是存放的每个字符串的地址,该地址指向一个对应的字...原创 2019-03-17 22:35:38 · 262 阅读 · 0 评论 -
魔方阵问题的求解
魔方阵问题的分析与求解(以5阶为列)一、定义魔方阵,古代又称“纵横图”,是指组成元素为自然数1、2、…、n2的平方的n×n的方阵,其中每个元素值都不相等,且每行、每列以及主、副对角线上各n个元素之和都相等。二、相关规则及其解法1、规则一:将1放在第一行中间一列2、规则二:从2开始直到n×n止各数依次按下列规则存放;每一个数存放的行比前一个数的行数减1,列数加1(例如上面的三阶魔方阵,5...原创 2019-03-03 18:55:20 · 941 阅读 · 0 评论 -
函数的递归
1.递归的含义按照某一包含有限步数的法则或公式对一个或多个前面的元素进行运算,以确定一系列元素(如数或函数)的方法。(通俗化的说法就是自己调用自己)2.写一个关于递归的函数——Age函数int Age(int n){int tmp;if(n==1)tmp=10;elsetmp=Age(n-1)+2;return tmp;}3.Age从哪儿来?递归函数存储在栈中,每个递归函...原创 2018-11-01 20:40:44 · 408 阅读 · 0 评论 -
【剑指offer】——常规练习题1
一、二叉搜索树的第K大结点1、题目要求给定一颗二叉搜索树,请找出其中第k大的节点。例如:在下面这颗二叉搜索树中,按结点数值大小排序,第三大结点的值是4.2、题目分析根据二叉搜索树的特点,我们都知道中序遍历的结果就是递增的排序。所以我们只需要中序遍历算法遍历一颗二叉搜索树,就可以找到他的第k大结点。具体代码实现如下:BiaryTreeNode* KthNodeCore(BiaryTreeNode* pRoot, unsigned int k){ BiaryTreeNode* target =原创 2020-05-15 14:13:46 · 257 阅读 · 0 评论 -
【剑指offer】——以空间换时间练习
一、丑数1、题目要求我们把只包含因子2、3、5的数称作丑数,求按从小到大的顺序的第1500个丑数。例如,6、8都是丑数,但14不是,因为它包含因子7.习惯上我们把1当做第一个丑数。2、题目分析方法一:首先,我们再来仔细分析一下丑数的概念,因为2,3,5是丑数的因子,那么就可以说明任意一个丑数对其中一个因子求余为0。丑数只能被2,3,5整除,也就是说,如果能被5整除,就除以连续5,如果最后得到的是1,那么这个数就是丑数。因此,我们可以写出下面的函数来判断一个数是不是丑数int GetUglyNu原创 2020-05-14 12:08:14 · 164 阅读 · 0 评论 -
【剑指offer】——优化时间和空间效率练习1
一、字符串的排列二、连续子数组的最大和三、1~n整数中1出现的次数四、数字序列中某一位的数字五、把数组排成最小的数原创 2020-05-12 13:12:21 · 296 阅读 · 0 评论 -
【剑指offer】——与二叉树结构相关的习题练习
一、二叉树的镜像1、题目要求请完成一个函数,输入一颗二叉树,该函数输出它的镜像。2、题目分析首先,我们要理解一下这个“镜像”的含义到底是个什么。具体的看下面这个例子。这两棵二叉树就是互为镜像的两棵二叉树。仔细观察这两棵树我们就可以发现其中的规律,他们的根结点都是相同的,但是他们的左右两个子结点交换了位置。其实镜像的过程很简单:先序遍历这棵树的每个结点,如果遍历到的结点有子结点,则交换他...原创 2020-05-09 12:36:37 · 154 阅读 · 0 评论 -
【剑指offer】——与二叉树遍历相关习题练习2
文章目录一、二叉搜索树的后序遍历序列二、二叉树中和为某一值的路径三、二叉树的深度四、平衡二叉树一、二叉搜索树的后序遍历序列1、题目要求输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回true,否则返回false.假设输入的数组的任意两个数字互不相同。例如下图的树输入数组{5,7,6,9,11,10,8}就是他的后序遍历结果,返回ture。2、题目分析首先,我...原创 2020-05-05 12:11:05 · 328 阅读 · 0 评论 -
【剑指offer】——利用快排解决的问题
说到快排,他的核心就是Partition函数的实现。他的基本思想就是选取一个数字作为基准,经过一趟排序过后基准左边的数字都比基准要小,右边部分都比基准要大。详细的可以看我之前的一篇关于快排的文章快排详解。今天的这两道题主要就是使用快排的思想解决我们实际的问题。一、数组中出现次数超过一半的数字1、题目要求数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{...原创 2020-04-20 23:15:45 · 281 阅读 · 0 评论 -
【剑指offer】——链表相关习题总结
一、链表中倒数第k个结点二、复杂链表的复制三、两个链表的第一个公共节点四、圆圈中最后剩下的数字原创 2020-04-19 11:49:33 · 275 阅读 · 1 评论 -
【剑指offer】——栈和队列相关练习
文章目录一、用两个栈实现队列二、用两个队列实现一个栈三、包含min函数的栈四、栈的压入、弹出序列一、用两个栈实现队列(1)题目要求用两个栈实现一个队列,请实现他的两个函数appendTail 和 deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能。template<typename T>class CQueue{public: CQueue(vo...原创 2020-04-13 18:31:50 · 177 阅读 · 0 评论 -
【剑指offer】——顺时针打印矩阵
题目要求输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.题目分析仔细分析这道题,我们可以发现他其实没有很复杂的数据结构和算法要求,但主要是代码中会包含很多层的循环,并且需要...原创 2020-04-12 11:21:21 · 157 阅读 · 0 评论 -
【剑指offer】——表示数值的字符串
题目要求请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100",“5e2”,"-123",“3.1416"和”-1E-16"都表示数值。 但是"12e",“1a3.14”,“1.2.3”,"±5"和"12e+4.3"都不是。题目解析首先,我们要明确表示数值的字符串的遵循模式为下图所示:注意1、其中A不是必需的,但是在此情况下小数部分不能为空2、关于符号:...原创 2020-04-11 11:03:14 · 154 阅读 · 0 评论 -
【剑指offer】——打印从1到最大的n位数
题目要求:输入数字n,按顺序打印出从1到最大的n位十进制数。比如输入3,则打印出1、2、3一直到最大的3位数即999。题目分析一拿到这道题,大家可能没有想太多,觉着很容易实现。首先根据n计算出最大的n位数,然后用一个for循环挨个打印就行。代码实现如下:void PrintNumber(int n){ int number = 1; int i = 0; while (i++ &l...原创 2020-04-10 12:40:56 · 785 阅读 · 1 评论 -
【剑指offer】——二分查找相关例题总结
一、旋转数组的最小值二、在排序数组中查找数字题目一:数字在排序数组中出现的次数题目二:0~n-1中缺失的数字题目三:数组中数值和下标相等的元素原创 2020-04-06 11:55:48 · 3809 阅读 · 0 评论