自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

天涯海角

厚积薄发~~

  • 博客(16)
  • 资源 (1)
  • 收藏
  • 关注

原创 【贪心算法】背包问题

在之前的《算法设计与分析》课程的学习中,我们就接触到了贪心算法解决背包问题,当然还有动态规划法解决0-1背包问题等等。今天我就来分析贪心法解决背包问题。为了大家可以理解贪心算法,我先分享一道比较简单的题目。问题描述:给你一个非负数整数n,判断n是不是一些数(这些数不允许重复使用,且为正数)的阶乘之和,如9=1!+2!+3!,如果是,则输出Yes,否则输出No; 第一行有一个整数0问题分析:看到这个

2017-01-30 21:32:49 1482

原创 【剑指offer】面试题42-翻转单词顺序VS左旋转字符串

题目一:问题描述:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字符一样处理。比如输入字符串”I am a student.”输出字符串”student. a am I”.问题分析:这种题目比较简单,翻转两次字符串就可以。第一次翻转整体字符串,第二次翻转单个单词。当然两次顺序可以颠倒~~实现起来比较简单,主要就是翻转函数。代码实现:#include<io

2017-01-29 21:04:30 524 1

原创 【剑指offer】面试题41-和为S的两个数VS和为S的连续正数序列

题目一:问题描述:输入一个递增的数组和一个数字s,在数组中查找两个数,使得他们的和刚好是s,如果有多对数字的和是s,输出任意的一对即可。问题分析:方法1:简单粗暴的办法。 具体实现:从数组的第一个数开始,依次判断其余的数与该数的和是不是s,这样就可以解决问题。时间复杂度是O(N*N)。 方法2:上边的方法虽然可以解决问题,但是它却没有利用题目最重要的条件–数组是升序的。有了这个最重要的条件,题目

2017-01-26 19:24:51 483

原创 【剑指offer】面试题40-数组中只出现一次的数字

问题描述:一个整形数组中除了两个数字外,其他数字都出现了两次,请找出这两个只出现一次的数字。时间复杂度为O(N),空间复杂度为O(1)。问题分析:看到这个问题,或许有些人就是不知道从何下手。如果说题目中是只有一个数字只出现一次,找出这个数字。我们可以遍历数组,也可以根据异或的性质,将所有的数字进行异或,得到的结果就是在只出现一次的数字。 在本题目中,如果我们可以确定只出现一次的两个数字中的其他一个

2017-01-25 11:56:28 385

原创 【剑指offer】面试题39-二叉树的深度

题目一:问题描述:输入一棵二叉树的根节点,求出二叉树的深度。二叉树的深度就是二叉树中从根节点到叶子结点形成的最长路径的长度。问题分析:求出左子树的深度和右子树的深度,树的深度就是左右子树深度较大值加1.代码实现:#include<iostream>using namespace std;#include<cassert>struct BinaryNode{ int _data;

2017-01-24 13:29:18 654

原创 【剑指offer】面试题38-数字在排序数组中出现的次数

问题描述:统计一个数字在排序数组中出现的次数。例如输入排序数组{1,2,3,3,3,3,4,5}和数字3,由于3字数组中出现了4次,因此输出4.问题分析:方法1:利用二分查找的思想,找到中间数据是不是给定的数字,如果是,则继续前后进行遍历,统计次数。如果不是的话,按照中间数字与给定数字的大小比较,去前半区间或者后半区间去查找。这样的话,时间复杂度就是O(N)(N是数组中元素的个数)。 方法2:上边

2017-01-23 14:23:29 787

原创 【剑指offer】面试题37-两个单链表的第一个公共结点

问题描述:输入两个链表,找出链表的第一个公共结点。问题分析:方法1:粗暴的办法。 从一个链表的第一个结点开始,再另一个链表上查找是否是交点(指向结点的指针一样),这样的话,如果一个链表的长度是m,另一个链表的长度是n,则时间复杂度是O(mn)。 方法2: 我们知道链表相交,不仅仅只是结点里的data值一样,next指针也是一样的,也就是说,如果两个链表从某一个结点处开始相交,那么之后两个链表一

2017-01-22 20:37:58 983

原创 【剑指offer】面试题36-数组中的逆序对

题目描述:在数组中的两个数字如果前边的数字大于后边的数字,则这两个数值组成一个逆序对。输入一个数组,求出这个数组中逆序对的总数。问题分析:方法1:粗暴的办法。 具体实现方法:从数组中的第一个元素开始进行遍历,每次都去该元素之后的元素中查找多少个小于当前元素的值,然后进行统计。返回结果即可。 时间复杂度O(N*N),空间复杂度O(1)。 方法2:归并排序的思想。 由于上述方法的时间复杂度比较高

2017-01-21 14:54:31 607

原创 【剑指offer】面试题35-第一个只出现一次的字符

问题描述:在字符串中找出第一个只出现1次的字符。如输入“abaccdeff”,输出b。问题分析:方法1:最直白最粗暴的方法。 具体实现方法:对于字符串中的每一个字符,都去遍历字符串,查找是否是只出现了一次。这样一来,时间复杂度是O(N*N),N是字符串中字符的个数。这样的办法往往不是最好的办法。 方法2:哈希法。 既然上边的方法时间复杂度太高,我们可以采用空间换取时间的哈希法去解决问题。 具

2017-01-20 15:12:52 679

原创 【剑指offer】面试题34-丑数

问题描述:我们把只包含因子2,3,5的数称为丑数,求按照从小到大的顺序的第1500个丑数。例如6,8都是丑数,但14不是,因为14含有因子7.我们习惯上把1当做第一个丑数。问题分析:方法1:从1开始,对每一个数都进行判断,看是否只含有2,3,5的因子,直到找到第1500个丑数为止。这种方法理解起来比较容易,但是却做了很多无用功,比如,对于非丑数,都进行了模除模除的操作,所以,时间上是比较浪费的。

2017-01-19 12:45:07 647 2

原创 【剑指offer】面试题33-把数组排成最小的数

题目描述:输入一个正整数的数组,把数组里的所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。并给出算法的证明。比如输入数组,{3,32,321},则打印出这3个数字能排出的最小的数字是321323.题目分析:这个题目最简单的做法也就是最容易想到的解法就是把数组中的数字进行全排列,求出最小的数。这样不是不可以,只是时间空间复杂度比较大。 下边从一个简单的例子开始分析: 假如给定的数组

2017-01-18 22:48:40 827

原创 【剑指offer】面试题32-从1到n整数中1出现的次数

题目描述:输入一个整数N,求出1~N这N个整数的十进制表示形式中 1出现的次数。比如输入12,从1~12这12个整数中包含1的数字有:1,10,11,12,1总共出现了5 次。题目分析:看到这个题目,大多数人的想法或许就是:循环遍历1~N中的每一个数,然后求出每个数中1的个数,然后求和。这样做的话,需要将N个数遍历一遍,然后将每个数的每一位遍历一次,时间复杂度是比较高的(大于O(N)),所以我们依然

2017-01-17 19:24:05 661

原创 【剑指offer】面试题31-连续子数组的最大和问题

题目描述:输入一个整形数组,数组中有正数也有负数。数组中一个或多个连续的整数组成一个子数组,求所有子数组和的最大值,时间复杂度为O(N)。题目分析:对于这道题目,我们大多数人一下子就可以想到:我可以列出一个数组的所有的子数组,然后求和,选出最大的和就是需要的结果。如果这样做的话,子数组的个数就是n(n+1)/2(n为数组的长度).并且求子数组的和的复杂度也不是O(1),所以这样的方法的时间复杂度一定

2017-01-16 13:32:21 761

原创 浅析task_struct结构体

本文内容概述: 1.进程的概念 2.进程控制块 3.剖析Linux下的PCB—task_struct说到task_struct,或许你是非常陌生的。如果我说他其实就是Linux下的对进程控制块PCB定义的一个结构体,你或许就会懂那么一点。下边开始今天分享的主题:1.进程的概念:说到进程控制块PCB,不得不说一下进程。在之前的操作系统的课程学习中,给出的定义:进程是程序的一次动态的执行过程。(这

2017-01-13 12:01:38 6128

原创 【leetcode】单链表的插入排序

单链表的直接插入排序排序思想跟数组的插入排序的思想是一样的。但是这里涉及到链表的插入删除等等,一些操作,实现起来还是稍微麻烦的。链表的直接插入:情况1:当前结点的值大于上一个结点的值,不用处理,直接去处理下一个结点;情况2:当前结点的值小于第一个结点的值,将当前结点插入到链表的开始。情况3:不满足上述两种情况的情况。也就是当前结点的值大于第一个结点的值,小于上一个结点的值时

2017-01-04 19:43:10 870

原创 由简单的进度条所引发的问题

本文内容的概述: 1、进度条实现原理。 2、缓冲区的问题。 3、回车换行问题。 4、进度条的实现机制。 5、编写简单的Makefile文件。1、进度条的实现原理: 通过增加字符来保证进度的增加。所以,一开始我们给定一个102的定长数组(下标从0到101),0号下标不使用,1到100下标表示进度,101号下标表示进度条完成时字符串的结束标志(C语言中字符串结束的标志是\0)。打印进度条的时

2017-01-01 13:48:54 599

electron-quick-start-master.rar

electron工具,这是我上传的,这个工具很好用,真的很好用,不信你试试

2020-07-16

空空如也

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

TA关注的人

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