![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法题(剑指offer)
ShawnWang1994
用心,慢慢来!
展开
-
【剑指offer】—— 链表中环的入口结点
题目描述给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。解答://链表结构struct ListNode{ int val; struct ListNode* next;};//找到相遇结点//快指针一次走两步,慢指针一次走一步//若两个指针相遇则存在环,若快指针走到NULL,则无环ListNode* MeetingNode(ListNode* he...原创 2019-08-18 17:09:09 · 159 阅读 · 0 评论 -
【剑指offer】——二进制中1的个数
题目:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。解答:一、将这个数进行位操作(有益处风险)#include<stdio.h>int Number1(int n){ int count=0; while(n) { if(n&1) count++; n=n>&...原创 2019-08-15 17:09:18 · 144 阅读 · 0 评论 -
【剑指offer】——连续子数组的最大和
题目描述HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。给一个数组,返回它的最大连续子序列...原创 2019-08-21 10:14:10 · 141 阅读 · 0 评论 -
【剑指offer】——重建二叉树
题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。解答:struct BinaryTreeNode{ int Value; BinaryTreeNode Left; Binar...原创 2019-08-16 09:53:11 · 171 阅读 · 0 评论 -
【剑指offer】——整数中1出现的次数(从1到n整数中1出现的次数)
题目描述求出113的整数中1出现的次数,并算出1001300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数)。解答:#include<stdio.h>#include<...原创 2019-08-21 11:56:07 · 204 阅读 · 0 评论 -
【剑指offer】——数值的整数次方
题目描述给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。解答#include<stdio.h>#include<stdbool.h>bool flag=false;double Power(double number,int exponent){ double result = 1.0;...原创 2019-08-16 10:46:45 · 242 阅读 · 0 评论 -
【剑指offer】——删除链表的节点(时间复杂度为O(1))
题目:删除链表的节点(时间复杂度为O(1))解答:struct ListNode{ int val; ListNode * next;};void DeleteNode(ListNode** pHead,ListNode* pToBedelete){ //链表为空或删除节点为空 if(!pHead||!pToBedelete) retur...原创 2019-08-16 15:05:53 · 383 阅读 · 0 评论 -
【剑指offer】——数字序列中某一位的数字
题目:数字序列中某一位的数字数字以0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中,第5位(从0开始计数)是5,第13位是1,第19位是4,等等。请写一个函数求任意位对应的数字。主要思路:举例分析,比如找第1001位数字,1)1位数的数值有10个:0~9,数字为10×1=10个,显然1001>10,跳过这10个数值,在后面找第991(1001-...原创 2019-08-21 16:42:39 · 183 阅读 · 0 评论 -
【剑指offer】——删除链表的重复节点
题目描述在排序链表中,删除链表的重复节点。解答:struct ListNode{ int val; ListNode* next;};void DeleteDup(ListNode** pHead){ //如果为空表 if(pHead==NULL||*pHead==NULL) return; //删除节点前一节点 ListNode*...原创 2019-08-16 16:46:57 · 126 阅读 · 0 评论 -
【剑指offer】——正则表达式匹配
题目描述请实现一个函数用来匹配包括 ‘.’ 和 ‘’ 的正则表达式。模式中的字符 ‘.’ 表示任意一个字符,而 ‘’ 表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"abaca"匹配,但是与"aa.a"和"ab*a"均不匹配解题 #include<stdio.h> #include<s...原创 2019-08-16 18:40:42 · 188 阅读 · 1 评论 -
【剑指offer】——链表中倒数第k个结点
问题:输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有6个节点,从头节点开始,它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个节点是值为4的节点。解答:#include<stdio.h>typedef struct ListNode{ int val; struct ListNode...原创 2019-08-18 11:14:16 · 138 阅读 · 0 评论 -
【剑指offer】——表示数值的字符串
题目描述请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100",“5e2”,"-123",“3.1416"和”-1E-16"都表示数值。但是"12e",“1a3.14”,“1.2.3”,"±5"和"12e+4.3"都不是。解答:#include<stdio.h>#include<stdbool.h>//判断是否是0~9之间的数,//...原创 2019-08-17 22:57:27 · 194 阅读 · 0 评论 -
【剑指offer】——顺时针打印矩阵
题目描述数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。解答:#include<stdio.h>#include<stdbool.h>#define true 1#define false 0bool...原创 2019-08-20 18:10:56 · 156 阅读 · 0 评论 -
【剑指offer】——斐波那契数列
题目描述大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39解答:一、递归#include<stdio.h>long long Fibonacci(unsigned int n){ if(n==0) return 0; if(n==1) return 1;...原创 2019-08-15 15:55:43 · 131 阅读 · 0 评论 -
【剑指offer】——反转链表
题目描述输入一个链表,反转链表后,输出新链表的表头。解答:#include<stdio.h>#include<malloc.h>typedef struct ListNode{ int val; struct ListNode* next;}ListNode;//利用一个数组,建立链表ListNode* creatlinkistR(ListN...原创 2019-08-19 10:53:35 · 155 阅读 · 0 评论 -
【剑指offer】——合并两个排序的链表
题目描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。ListNode* Merge(ListNode* Head1,ListNode* Head2){ if(Head1==NULL) return Head2; if(Head2==NULL) return Head1; ListNode* pMerge=NULL; //用递归的...原创 2019-08-19 14:55:13 · 152 阅读 · 0 评论 -
【剑指offer】——替换空格
题目:请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。解答:#include<stdio.h>#include<string.h>#include<stdlib.h>void replaceSpace(char *str,int length...原创 2019-08-14 18:38:14 · 150 阅读 · 0 评论 -
【剑指offer】——二维数组中查找
题目:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样一个二维数组和一个整数,判断数组中是否含有该整数解答:#include<stdio.h>#include<stdbool.h>bool Find(int target,int vector[4][4],int rowC...原创 2019-08-13 23:09:10 · 117 阅读 · 0 评论 -
【剑指offer】——树的子结构
题目描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构) struct TreeNode {double val;struct TreeNode *left;struct TreeNode *right; };解答://判断两个结点的值是否相等,注意是double型bool Equal(double nu...原创 2019-08-20 10:54:54 · 140 阅读 · 0 评论 -
【剑指offer】——二叉树的镜像
题目描述操作给定的二叉树,将其变换为源二叉树的镜像。输入描述:二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ 11 9 7 5解答:...原创 2019-08-20 11:23:39 · 148 阅读 · 0 评论 -
【剑指offer】——对称的二叉树
题目描述请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的解答:struct TreeNode{ int val; struct TreeNode* left; struct TreeNode* right;};//定义树的结构bool isSymmertrical(TreeNode* pRoot){ return i...原创 2019-08-20 11:53:42 · 142 阅读 · 0 评论 -
【剑指offer】——从尾到头打印链表
题目:从尾到头打印链表解答:struct ListNode{ int val; ListNode* next;}void PrintListR(ListNode* head){ if(head!=NULL) { if(head->next!=NULL) { PrintListR(head->next); } printf("%d\t",he...原创 2019-08-15 10:39:17 · 127 阅读 · 0 评论 -
【剑指offer】——用两个栈实现队列
题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。解答:typedef struct SQueue{ Stack stack1;//入队 Stack stack2;//出队}SQueue; void QueuePush(SQueue *ps, int data){ Stack *p1, *p2; p1 = &(ps->s...原创 2019-08-15 12:05:28 · 109 阅读 · 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.解答:#include<stdio.h>void PrintCircle(int num[3][3]...原创 2019-08-20 15:23:47 · 205 阅读 · 0 评论 -
【剑指offer】——旋转数组的最小数字
题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。解答:一、遍历数组,逐一比较,取最小值。#include<stdio.h>int Min(i...原创 2019-08-15 15:07:07 · 105 阅读 · 0 评论 -
【剑指offer】——调整数组顺序使奇数位于偶数前面
题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。解答:#include<stdio.h>void ReorderOdd(int *data,int length){ if(data==NULL||length<0) return; /...原创 2019-08-18 10:30:14 · 155 阅读 · 0 评论