刷题
文章平均质量分 69
每天一到面试题,分析面试题中的算法。
_stark
这个作者很懒,什么都没留下…
展开
-
如何实现翻转一串二进制代码:
如何实现翻转一串二进制代码:方法一; 指数法 for(i=0;i { ret=value & 1; //value为需要翻转的二进制序列 sum=sum+(ret*pow(2,(31-i))); //每次&1取最低位然后乘以起翻转后的权的二次幂;原创 2016-04-06 21:25:02 · 1273 阅读 · 0 评论 -
实现顺序表以及顺序表的简单运算
自定义头文件 my_list.h#define _CRT_SECURE_NO_WARNINGS#ifndef __MY_LIST_H__#define __MY_LIST_H__//文件功能:实现线性表的基本运算//1:顺序表的插入预算//2:顺序表中元素的逆序//3:顺序表的删除运算#define max_size 1024 //定义顺序表的上限长度原创 2016-04-09 09:23:58 · 1125 阅读 · 0 评论 -
用冒泡排序法实现qsort函数
—、qsor函数:qsort函数是一个能排序任何数据类型的函数,让我们先来了解一下qsort函数的形参和返回值。 void qsort( void *base, size_t num, size_t width, int (__cdecl*compare(const void *elem1, const void *elem2 ) );函数原型中qsort函数有四个参数,分别为:原创 2016-05-01 20:45:29 · 1290 阅读 · 0 评论 -
剑指offer剖析__空格替换字符串问题
问题:在"we are happy"这个字符串中,将所有的空格替换成字符串%20.分析:如果我们不定义一个新的字符数组,就在原字符数组中进行替换,要将一个字节的空格替换成三个字节的字符数组%20,这会产生数组的越界访问,如果允许我们开辟一个新的空间来存放替换后的字符串,则问题将会变得非常简单。设置两个指针分别指向新旧字符串首元素,遍历原字符串,如果碰到空格就在新字符串上填入“%20”,否则原创 2016-05-10 22:18:18 · 1581 阅读 · 1 评论 -
面试题——找单独数字
数组A中,除了某一个数字x之外,其他数字都出现了三次,而x出现了一次。请给出最快的方法,找到x。这道题是:数组中除了一个数字外,其他数字都出现了两次这道题的升级版,在其他数字都是两个的数组中找出单独的数字,由于两个相同的数字经过异或运算后为0,所以我们只要让数组中的每一个数字相互异或就能找到那个单独数字。现在问题换成了其他数字都出现三次了,如果让数组中的数字都两两异或,出现原创 2016-06-05 17:26:09 · 1264 阅读 · 0 评论 -
与单链表有关的算法问题
单链表结构的定义:typedef int DataType;typedef struct LinkNode{ DataType data; struct LinkNode *next;}LinkNode, *pLinkNode;typedef struct Linklist{ LinkNode *phead;}LinkList, *pLinkList; //封装头节点,原创 2016-06-10 22:28:30 · 943 阅读 · 0 评论 -
浅谈计算机内存中浮点数的表示
什么是浮点数提到浮点数相信大家一定不会很陌生,浮点数表示对形如V=x*(z^y)的有理数进行编码,它对执行涉及非常大的数字(|V|>>0)和非常接近于0的数字是非常有用的。浮点数在内存中的存储废话不多述,直接进入正题,首先,我们来看看下面这段代码,大家可以自行在自己的编译器上运行一下:#include <stdio.h>int main(){ float a = 0.0; flo原创 2017-01-22 00:17:43 · 1088 阅读 · 0 评论 -
C语言结构体的内存对齐
什么是结构体?学过C语言的大家应该都学到过结构体,结构体是一种聚合数据类型,它可以把不同类型的数据存储在一起,我们把结构体中存储的数据叫做结构体成员。结构体的内存对齐了解了结构体后,我们来谈一谈结构体在计算机系统中是如何存储的,首先,我们来看看下面这段代码:struct A{ char a; int b; char c;};int main(){ struct原创 2017-02-02 15:30:15 · 598 阅读 · 0 评论 -
二叉树的创建和相关算法
二叉树是一种非常重要的数据结构,它是分支结构的基础,今天本人将写一篇博客来叙述一下其相关的算法以及二叉树的创建过程!1:二叉树的创建:主要有 先序,中序,后序,层序创建几种方式,其中前三种建立在二叉树遍历方式的基础上的。(1):先序创建 先序创建就是先创建根节点,随后依次创建其左子树和右子树,我们可以采用递归的方法来实现,因为二叉树本身就是建立在递归算法的基础上的。(2原创 2016-05-29 15:37:03 · 15598 阅读 · 2 评论 -
剑指Offer___关于复杂链表的复制算法剖析
本文的源代码和测试代码:https://github.com/clearoff/learngit/blob/master/ComplexLinklist.c1、复杂链表的定义: 一般的,我们把只有一个数据于和一个指针的节点所组成的链表叫做单链表,由单链表我们引出了复杂链表的定义,如下图:【复杂链表在C语言中的定义】:typedef struct ComplexLi原创 2016-06-17 17:26:59 · 741 阅读 · 0 评论 -
浅析三种多路搜索树
B树家族磁盘I/O操作的基本单位为块。从磁盘上读取信息时,会把包含信息的整个块读入内存;将信息存储到磁盘上时,也需要将整个块写到磁盘上。当每次从磁盘上请求信息时,都必须先在磁盘上定位该信息。磁头移动到包含所请求信息的磁盘位置上方。然后,将磁盘旋转,将磁头下方的整个块传送到内存。也就是说,数据访问时间由几个时间段组成:访问时间=寻道时间+转动延迟+数据传送时间与在内存中传送信息相比,这个过程是相当原创 2016-11-17 11:10:12 · 5581 阅读 · 0 评论 -
浅析快速排序
快排的引入快速排序被称为世界十大算法之一,就像他的名字一样,速度快,效率高,是一种优秀的排序算法。今天我们来介绍几种快速排序的实现方法;以及快速排序的思想。算法思想## 快速排序采用了分治的算法思想,先找出一个基准元素,然后定义两个指针分别指向拍序序列的头和尾(不包含基准元素),left负责找大于基准元素的数,right负责找小于基准元素的数,一趟交换直到left和right交换为止,最后把l原创 2016-11-30 16:46:08 · 531 阅读 · 0 评论 -
【数据结构】二叉树面试题总结
为了对二叉树的知识进行巩固,今天我们来解析5道二叉树的经典面试题。 这五道面试题如下:求二叉树中最远两个结点的距离;判断一棵树是否是完全二叉树;由前序和中序遍历序列重建二叉树 (前序序列:1 2 3 4 5 6 - 中序序列:3 2 4 1 6 5);求二叉树两个结点的最近公共祖先;将二叉搜索树转化成有序的双向链表;现在我们来对这五道题进行分析:求二叉树中最远的两个节点之间的距离这原创 2016-12-01 18:11:35 · 2695 阅读 · 0 评论 -
由一道面试题到并查集
面试题引入问题描述:假如已知有n个人和m对好友关系(存于数字r)。如果两个人是直接或间接的好友(好友的好友的好友…),则认为他们属于同一个朋友圈,请写程序求出这n个人里一共有多少个朋友圈。假如:n = 5, m = 3, r = {{1 , 2} , {2 , 3} ,{4 , 5}},表示有5个人,1和2是好友,2和3是好友,4和5是好友,则1、2、3属于一个朋友圈,4、5属于另一个朋友圈,结果为原创 2016-12-03 11:49:07 · 1430 阅读 · 1 评论 -
C++:日期类的实现
所谓的日期类,就是能对日期进行加减天数和减日期求天数之间的运算,运用到了C++中类以及运算符重载的相关知识,下面我们来用C++将日期类实现以下。Date.h:用来定义日期类的成员变量和成员函数#ifndef DATE_H__#define DATE_H__#include using namespace std;class Date{private: int m_year;原创 2016-08-05 12:01:03 · 995 阅读 · 0 评论 -
C++知识体系思维导图
原创 2016-09-08 11:39:34 · 9820 阅读 · 0 评论 -
【算法面试题】交换排序问题
面试题原数组pArr为[‘A’,’B’,’C’,’D’,’E’],现在给定新位置pPos[3,0,1,4,2],要求只能采用交换的方式并按照新位置进行排序,要求空间复杂度为O(1)。排好序后的序列为 D A B E C.问题分析如果不给限制条件这道题还是非常简单的,现在给定了空间复杂度的限制为O(1),也就是说我们不能再原有数组的基础上再来开辟新的空间,这道问题就变得有些复杂了。第一种解法:不原创 2016-12-19 17:32:25 · 589 阅读 · 0 评论 -
C++对象模型和多态
什么是多态?多态是C++三大特性之一,它可以简单的概括为“一个接口,多种方法”,程序在运行时才能通过基类指针指向的对象的类型来决定调用那个函数,今天我们就要谈谈多态的底层的实现。虚函数C++多态是通过虚函数来实现的,所谓的虚函数,就是在类的成员函数返回值类型前面加上virtual关键字来定义的,在C++中允许派生类对基类的虚函数进行重写,一旦派生类对基类的虚函数进行重写,那么在派生类中,基类的虚函数原创 2017-02-10 16:07:26 · 701 阅读 · 0 评论 -
面试题OJ:反转链表
反转链表是比较基础的问题,直接使用暴力法即可,这里采用了非递归和递归两个版本,大家在写代码时应该注意要在函数前面检查指针是否为NULL的问题,否则很容易会出现空指针的解引用问题:这里直接给出代码,包含测试用例://面试题:反转链表#include <iostream>using namespace std;struct ListNode { int val; struct Li原创 2017-01-23 13:16:24 · 704 阅读 · 0 评论