自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(23)
  • 资源 (1)
  • 收藏
  • 关注

原创 一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。

剑指offer:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。思路:1)如果把数组中的所有数字都依次异或一遍,则可以消掉成对出现的数字,那么还有两个数字是单一的,肯定也不同,那么最终异或的结果肯定不是0。表示在二进制中肯定有一位是1,那么两个不同的数字,一定有一个在该位为1,另一个在该位为0。如果将整个数组按照该位是否为1分为两部分,那么这两部分各

2017-07-30 11:12:38 7081

原创 输入一棵二叉树,判断该二叉树是否是平衡二叉树

剑指offer:输入一棵二叉树,判断该二叉树是否是平衡二叉树思路:核心是用一个函数,既能返回深度,又能返回是否平衡。IsBalanced_Solution_Core函数既能求树的深度,又可以返回是否是平衡二叉树,如果不平衡,则返回-1如果节点为空,返回0;递归求左子树的深度和是否平衡,如果左子树不平衡,返回-1;递归求右子树的深度和是否平衡,如果右子树不平衡,返回-1;如果上面条件都不满足,则

2017-07-28 22:08:25 338

原创 输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。

剑指offer:输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。思路:必须遍历整棵树,有三种遍历方式,前序、后续和中序。这里不用访问节点值,指的是计数。采用前序。/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right;

2017-07-28 21:23:33 4428

原创 统计一个数字在排序数组中出现的次数。

剑指offer:统计一个数字在排序数组中出现的次数。思路:改进二分查找算法,找到第一个K出现的索引,和第最后一个k的索引。class Solution {public: int GetNumberOfK(vector data ,int k) { //必须先考虑边境条件 int vecLen = data.size(); if(ve

2017-07-28 20:17:40 467

原创 输入两个链表,找出它们的第一个公共结点。

剑指offer:输入两个链表,找出它们的第一个公共结点。思路:如果两个链表有公共节点,那么它们在第一个公共节点以后的节点都相同。1)分别求出两个链表的长度length1和length2;2)求出两个链表长度差dif;3)让长的链表先从头往后先走dif步4)连个链表同时走,直到指针相同为止,返回当前指针。5)如果两链表走到头也地址不相同,则返回NULL代码如下:/*

2017-07-27 16:21:58 381

原创 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%100000000

剑指offer:在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007思路:链接:归并排序启发得来,把数据分成前后两个数组(递归分到每个数组仅有一个数据项),合并数组,合并时,从后往前遍历,出现前面的数组值array[i]大于后面数组值array[

2017-07-26 21:30:09 1906

原创 在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置

剑指offer:在一个字符串(1思路:用空间换时间。1)建立一个长为256的数组,其实全部由字母组成也可以建立一个长度26*2=52的数组,但是稍微麻烦,这里不使用。将所有元素全部初始化为0;2)遍历字符串,将对应字符对应的数组元素加一;3)再次遍历字符串,直到找到第一个字符对应的数组元素值为1的元素。代码1:用c中的char*字符串,由于题中给出的是str类型,因此需要转换。刚开始还

2017-07-26 11:09:43 3552

原创 把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。

剑指offer:把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。思路1:对每个数进行整除2 3 5,看余数是不是1。这个办法会很蠢。思路2:第一个丑数是1,第二个是2第几个     1      23  4   5 67 8 9      

2017-07-24 22:41:33 2940

原创 输入一个正整数数组,输入一个正整数数组,把数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。

剑指offer:输入一个正整数数组,输入一个正整数数组,把数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。思路:两个数比较,哪个更适合放在前面,可以将两个数拼起来,谁放在前面,拼起来的数小,谁就更适合放在前面。关键是要会用,stringstream做int和string的转换,还要会用sort排序。代码如下:#incl

2017-07-24 21:54:14 1849

原创 从1到n个自然数中,各个数位包含1的个数

剑指offer:求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数思路:分三个部分。以21345为例 1)最高位中包含1的个数numFirstDigit:2)从1

2017-07-18 19:42:42 878

原创 最大之列和问题

剑指offer:最大子列和问题HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。你会不会被

2017-07-18 10:13:16 194

原创 输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。

剑指offer:输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。思路一:用一个multiset存储k个数,后面得到一个数,如果得到的数字比leastNumbers中的最大值大,则舍去,否则删掉最大值,插入得到的数到multiset中。直到所有的n-k数走一遍。则multiset中的k个数便是n个数中最小的k个数。由于

2017-07-17 21:42:58 4334

原创 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在

剑指offer:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。思路1:注意到目标数 超过数组长度的一半,对数组同时去掉两个不同的数字,到最后剩下的一个数就是该数字。如果剩下两个,那么这两个也是一样的,就是结果),在其基础上把

2017-07-10 16:40:35 1065

原创 输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。

剑指offer:输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。思路:本题考查递归解决问题的思路。首先将输入的字符串转化为有序字符串。将字符串分为两部分,第一个字符,和后续N-1个字符。后续问题可以用递归函数。按顺序确定第一个字符,然后递归操作剩下的N-1个字符(要

2017-07-10 14:38:16 6178

原创 排序算法之——快速排序

在面试阿里和华为实习生的时候,都被问到快速排序的问题,看来软件岗面试官对这个问题十分重视,因此特别在此剖析。思路:快速排序使用分治法,将问题的规模减小,然后再分别进行处理。从原序列中选择一个主元,将比主元大的元素从右向左放置,而比主元小的元素,从左向右放置。通俗来讲,就是,找一个基准主元,比主元小的元素放在左边,比主元大的元素放在右边,主元放在中间。形成了三个新的数列,左边的数列,中间一个

2017-07-09 17:04:17 274

原创 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。

慕课讨论区里的大神答案很牛,不过是java的代码,我后面贴上自己方法二的c++代码链接:https://www.nowcoder.com/questionTerminal/947f6eb80d944a84850b0538bf0ec3a5来源:牛客网方法一:非递归版解题思路:1.核心是中序遍历的非递归算法。2.修改当前遍历节点与前一遍历节点的指针指向。    impo

2017-07-08 17:08:31 1123

原创 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序

剑指offer:输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)前述:这道题一定要感谢牛客网上大神的解答,为了表示佩服,我就完全不写我的见解了。思路:见大神的注释,特别强调,拆分也很简洁。/*struct RandomL

2017-07-06 17:09:14 881

原创 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径

剑指offer题目描述输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径思路:我自己做了一个,后来对比网上别人做的,发现更好,我将他的思路改进了一下,现在将两种思路都讲一下。思路1:看代码。/*struct TreeNode { int val; struct TreeNode *

2017-07-06 14:52:19 998

原创 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。

剑指offer:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。储备知识:二叉树的后续遍历,就是1)遍历做字数,2)遍历右子树,3)访问根结点。所以数组的最后一个元素一定是根节点的值                  二叉搜素树的左子树一定小余根节点,右子树一定大于根节点。所以比根节点小的值一定位于数

2017-07-06 09:54:30 507

原创 从上往下打印出二叉树的每个节点,同层节点从左至右打印。

剑指offer:从上往下打印出二叉树的每个节点,同层节点从左至右打印。思路:利用一个队列就可以了。其实就是二叉树的层次遍历/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {

2017-07-05 22:26:06 240

原创 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。

剑指offer:定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。思路,用一个minStac堆栈存储最小值,与dataStack堆栈同时存储其实也可以自己用数组和单向链表实现堆栈。这里采用stack,快一点代码如下:class Solution {public: stack dataStack,minStack; void push(

2017-07-05 20:15:16 330

原创 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8

剑指offer:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 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.思路:这个题考虑的情况比较多,考察的是细心程度和面对复杂问题的逻辑分析能力。耐心分析就好。首先在while里

2017-07-05 17:03:44 5908

原创 操作给定的二叉树,将其变换为源二叉树的镜像。

剑指offer:操作给定的二叉树,将其变换为源二叉树的镜像。思路:详见代码。注意:树不为空,但是左右子树可以同时为空。比如叶子结点。/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(

2017-07-05 11:27:27 451

IAR5.5for430注册机

IAR5.5版本,IAR更新换代很快,所以有的时候会出现高版本打不开低版本的工程的问题,所以提供低版本的供大家使用。这里上传注册机,安装包请在另外的文件中下载,因为一次上传文件不能超过6oM

2015-05-14

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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