自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

星宇宙的专栏

重视基础的技术分享者

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

转载 电商项目总结

电商秒杀功能参考:https://blog.csdn.net/luomingkui1109/article/details/77432192https://blog.csdn.net/lao_wang_tou/article/details/79058695https://blog.csdn.net/zhang89xiao/article/details/51839441https://blog....

2018-04-08 17:49:04 617

原创 数据结构 二叉树的性质

一、概述 为什么要使用二叉树呢?比如我们在使用数组的时候,添加数据和删除数据 都会大量的进行数据移动,从而减少了程序的性能。在我们使用链表的时候,如果要查找一个节点,因为需要找到根节点或者尾节点然后一个节点一个节点的往下寻找,相对也会很慢。二叉树的优点有很多,因为结构有序。比如面对大量数据的时候,查找节点的速度非常快。而且他也吸收了链表的优点,删除和添加节点也和链表一样。二叉树结合了数组和链表的

2017-08-05 19:46:01 509

转载 反编译unity3d发布apk

郑重声明:本教程仅用于学习使用,从事任何商业用途非法行为与作者无关,请知晓! 本文目的:通过教会大家如何破解别人游戏的同时,也希望各位开发者能加强自身游戏的防破解能力! 1:到gitHub下载DisUnity v0.3.3软件,下载地址: https://github.com/ata4/disunity/releases   简单教程:https://github.com/

2017-03-01 16:51:58 919

原创 Android 开源框架Universal-ImageLoader的使用

ImageLoader 是一个图片加载开源框架,他的很多优点帮助我们解决了开发中图片加载的大部分问题。优点如下: 高效加载。基于BitmapFactory.Options的inSampleSize属性缩放图片,减少了OOM的问题。LRU缓存策略。LRU算法的核心思想是释放最近最少使用的缓存,ImageLoader内部用LruCache和DiskLruCache实现内存缓存和硬盘缓存,避免

2016-06-30 16:26:41 428

原创 Java 彻底弄明白synchronized的使用

多个线程访问共享资源(临界资源)的时候,会出现线程安全问题,安全问题大多数是可见性问题和原子性问题。 可见性: 例如执行多个线程执行a++,那么多个线程就会被分配到不同的处理器上,每个处理器都从主存上复制操作一份拷贝,处理完成后复制给主存。由于分配到了不同的处理器上,两个线程的操作可能会互相覆盖,这样的结果就会和预想的又偏差。例如如下代码: private volatile static i

2016-06-23 18:08:59 7940

原创 java 中断线程

线程在运行过程中,如果我们希望线程可以中断,则可以使用以下方法,停下来之后我们可以决定线程是终止下来 还是继续执行,本质上来说,中断只是一个线程信号,希望能引起线程的注意。本文中,我们中断之后采用终止执行。 使用Interrupt()中断线程: interrupt方法实际上是让程序发生抛出一个InterruptedException(被中止异常。当某个线程处于长时间的等待、休眠或其他暂停状态,

2016-06-22 16:47:50 402

原创 Java中 Thread和Runnable实现多线程的区别和联系

Java有两种方式实现多线程,第一个是继承Thread类,第二个是实现Runnable接口。他们之间的联系: 1、Thread类实现了Runable接口。 2、都需要重写里面Run方法。 他们之间的区别“ 1、实现Runnable的类更具有健壮性,避免了单继承的局限。 2、Runnable更容易实现资源共享,能多个线程同时处理一个资源。 看一下以继承Thread的买票例子: publ

2016-06-22 12:18:19 7555 4

原创 Java算法 归并排序

归并排序是典型的采用分治法的算法,可以将一个无序序列变的有序,其步骤是将序列分成若干个有序序列,然后在将有序序列合并。 public static void main(String[] args) { // TODO Auto-generated method stub int[] nums = { 2, 7, 8, 3, 1, 6, 9, 0, 5, 4 }; sort(

2016-06-20 13:35:31 283

原创 java数据结构 堆与堆排序

堆的定义: 1、堆是完全二叉树,能有效的访问的树中最大或者最小的元素。 2、他常常使用一个数组实现。 3、堆中每个节点的值都大于或者小于这个节点的值。当堆中的父节点总是大于子节点的时候,我们称之为最大堆,反之称之为最小堆。 如下图a和b所示,他是一个最小堆与最大堆(图片摘自网络http://www.lxway.com/225509804.htm,侵权请告知) 堆的索引: 堆用数

2016-06-17 22:59:46 546

原创 两个链表的第一个公共节点

题目: 输入两个链表,找出他们的第一个公共节点。 输入: 单链表A:4,3,2,1,单链表:3,2,1 输出: 3 解题思路: 1、得到两个链表的长度,链表A减去链表B的长度得到变量DPSLength。 2、如果变脸DpsLength大于0,则链表A往前走DPSLength步,否则,链表B往前走DPSLength步。 3、接下来,两个链表同时遍

2016-06-15 16:04:26 1478

原创 面试题35 第一个只出现一次的数组

题目: 在字符串中找出第一个只出现一次的字符,如输入“helloWorld”,则输出“H”,要求时间复杂度为0(N) 输入: 字符串:helloWorld 输出: 字符:h 解题思路: 1、创建哈希表A,遍历字符数组,将字符作为Key,出现次数做为value。 2、如果Key没有重复出现,则Value设置为1,否则Value累加1. 3、遍历哈希表,找到第一个Value为1的字符

2016-06-15 15:28:10 481

原创 面试题31 连续子数组的最大和

题目: 输入一个整形数组,数组中一个或者多个数组组成一个子数组,求所有子数组和的最大值,要求时间复杂度为0(n). 输入: {1,2,-1,4,6,8,-6}; 输出: 21 解题思路: 1、从头到尾累加数字,声明变量A保存累加结果,声明变量B保存所有子树和的最大值。 2、累加过程中,如果当前累加结果小于0,那么我们就抛弃之前的运算,否则进行累加。 3、最后让变量A和变量B对

2016-06-15 15:07:08 369

原创 面试题29 数组中超过一半的数字

题目: 数组中有一个数字的出现次数超过了数组的一半,请找出这个数字,例如输入一个长度为8的数组{1,3,7,7,7,7,7,5},由于7出现了5次,所以输出7. 输入: {1,3,7,7,7,7,7,5} 输出: 7 解题思路: 1、该数字出现次数最多,循环每个数字,并用一个变量A保存数字出现次数另一个变量B保存出现最多次数的数字。 2、当下一个

2016-06-15 14:37:47 277

原创 面试题26 复杂链表的复制

题目: 请实现函数ComplexListNode(LinkNode head),复制一个复杂链表。在复杂链表中,出了有Next指针意外,还有一个Sibling指向链表中的任意节点或者Null,节点定义如下: public class LinkNode{ public int data; public LinkNode next; public LinkNode subLing; }

2016-06-15 14:22:04 360

原创 面试题 25 二叉树中的和为某一值的路径

题目: 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。 输入: 二叉排序树序列:8,2,7,10. 节点和:17 输出结果: 7 2 8 解题思路: 用递归的方式前序遍历从根节点往下寻找,每次向下寻找,我们就把找过的节点放入一个栈里面,并且用一个节点累加该节点的值,如果该值等于要找的整数

2016-06-15 14:10:08 397

原创 面试题24 二叉搜索树的后序遍历序列

题目: 输入一个整数数组,判断该数组是不是某二叉排序树的后序遍历。如果是返回true,否则返回false。假设该数组 任意两个数都不相同。 输入: 二叉搜索树后序遍历序列:7,6,4,5 输出: false 解题思路: 二叉搜索树的后续遍历序列,往往序列中最后一个数字是根节点的值,因此,序列可以分为两部分,一部分比根节点小的为左子树,比根节点大的为右子树。我们接下来用同样的方法来

2016-06-15 12:13:20 471

原创 从上到下打印二叉树

题目: 从上到下打印每个二叉树节点的值,用一层按照从左到右的顺序。也就是层序遍历。 输入: 输出: 50 20 60 15 30 70  解题思路: 从根节点分析,我们要把一个二叉树存入一个容器,这个容器可以按照存入顺序,依次把二叉树的根,左子树,右子树出列。在这里,我们使用队列。 Java代码实现: public static void main(String[] a

2016-06-14 12:39:47 386

原创 面试题22 栈的压入、弹出序列

题目: 输入人两个整数数列,第一个序列为栈的压入序列,判断第二个序列是否为栈的弹出序列。 输入: 压入序列A:1,2,3,4,5和弹出序列B:4,5,3,1,2 输出: false 解题思路: 我们需要一个辅助栈和两个指向序列A和B的指针pushNext(指向序列A的第一个元素),popNext(指向序列B的第一个元素),栈的作用是压入和弹出 序列A。每次压入的时候,我们需要做对

2016-06-14 12:24:35 436

原创 面试题21 包含Min函数的栈

题目: 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数,在该栈中,请用mim,push,pop的时间复杂度都为O(1) 输入: 10,20,9 输出: 最小元素:9 解题思路: 如果仅仅用一个栈,那么当出栈的时候如果是最小元素,我们无法获得此小元素,因此,我们可以使用一个辅助栈,当我们插入一个元素的时候,让他和辅助栈的栈顶对比,如果小于辅助栈栈顶,也插入辅助栈

2016-06-14 11:55:21 449

原创 顺时针打印矩阵

题目: 输入一个矩阵,按照从外向里的方式按照顺时针依次打印出每一个数字。 输入: {{1, 2, 3, 4, 5}, {6, 7, 8, 9, 10}, {11,12,13,14,15}, {16,17,18,19,20}, {21,22,23,24,25}}; 输出: 1 2 3 4 5 10 15 20 25 24 23 22 21 16 11 6 7 8 9 14 19

2016-06-14 01:35:59 590

原创 面试题19 二叉树的镜像

题目: 输入一个二叉树,输出该二叉树的镜像 输入: 二叉排序树的前序遍历:8 2 4 7 9 10  输出: 该二叉树的镜像的前序遍历:8 9 10 2 4 7  解题思路: 本质上就是不停的交换二叉树的左子树和右子树,直到树的叶节点或者节点为空。 Java代码实现: public static void main(String[] args) { // TODO Auto-

2016-06-14 00:49:52 372

原创 面试题18 树的子结构

题目: 输入两个二叉树A和B,判断B是不是A的子结构,二叉树的结构如下: public class Node{ public Node(int data){ this.data=data; } public int data; public Node leftChild; public Node rightChild; } 输入: 树A和树B,他们都是二叉排序树。

2016-06-14 00:36:17 478

原创 面试题17 合并两个排序链表

题目: 输入两个递减链表,合并这两个链表之后的节点依然是按递减排序的。如下所示,让链表一和链表二变成链表三。 链表一: 链表二: 链表三: 输入: 链表一和链表二都是采取头插法的单链表。 输出: 链表三 解题思路: 链表先从头结点合并,如果链表1的头结点大于链表2的头结点,那么链表3的的头结点为链表1的头结点,反之为链表2的头结点。我们往下依然可以重复以

2016-06-13 22:26:45 694

原创 面试题15 链表中到户第K个节点

题目: 输入一个链表,输出该链表中倒数第K个节点。为了符合少数人的习惯,本题从4开始计数,从头结点到尾节点依次为4,3,2,1,。倒数第3个节点为2. 输入: 一个头插法的单链表(4,3,2,1),和K(3) 输出: 第K个节点的值:2 解题思路: 有两种解法,第一种是通过遍历单链表获取其总长度,然后让总长度M减去K加上1获得正数位置L,就是倒数第K个节点。但是这样需要循环两次。第二

2016-06-13 20:30:25 369

原创 调整数组顺序使奇数位于偶数前面

题目: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,是的所有奇数位于数组的前半部分,偶数位于后半部分。其实还有后半段,就是考虑函数的扩展性,当然书中另外说明了。 输入: 任意正整数序列,是序列长度大于(0 输出: 所有奇数在前面,偶数在后面 解题思路: 我们可以用分治法来解决这个问题,比如声明两个指针,第一个指针指向序列首位,他向后移动。第二个指针指向序列尾部,他向前移动

2016-06-13 20:04:53 529

原创 面试题11 :O(1)删除单链表节点

题目: 写一个函数delectNode(Node header,Node delectNode),在O(1)的时间删除该节点。 输入: 输入一个头插法的单链表。从头到尾是321,要删除的节点是链表头 输出: 21 解题思路: 目前想到有两种,第一种效率较高,我们可以获得要删除的节点的下一个节点,我们只要把下一个节点复制给当前节点就可以了。但是还需要考虑几个问题,要删除的节点是否为空,

2016-06-13 17:23:16 2216

原创 数值的整数次方

题目: 实现函数Power(double base,int exponed),求base的exponed次方,不能使用库函数,不需要考虑大数问题。 输入: 输入一个浮点型数字和一个整数数字(不管正负) 输出: 浮点数的整数次方 解题思路: 这样的问题很简单,但是要考虑一些边界性问题,比如base的exponed次方如果都为0,那么在数学上就是没有意义的,所以我们要进行特殊处理,还有如

2016-06-13 15:58:11 458

原创 面试题10 二进制中1的个数

题目: 请实现一个函数,输入一个整数,输出该数二进制1的个数。例如2为0010,该函数输出1. 输入: 一个整数(不管正负) 输出: 该整数1的个数 解题思路: 最先想到的方法是该整数与一个整数1做于操作,每做一次,该整数左移一位,直到变成0,基于这样的思路不难写出代码一。但是这样的话,代码一会在输入负数的时候,会引起死循环,所以我们可以声明变量B(初始为1)与该整数做与操作,每做一

2016-06-13 15:25:58 426

原创 面试题九斐波那契和青蛙跳台阶

题目: 要求输入一个整数n,请你输出斐波那契数列的第n项。 如下: 输入: 一个正整数n 输出: 斐波那契数列的第n项 解题思路: 有两种,是通过递归来实现,这种方法最大坏处是在于很多地方是重复计算的,所以,我们可以考虑从下往上来实现这个函数 public static void main(String[] args) { // TODO Aut

2016-06-13 15:03:55 451

原创 用两个栈实现队列

题目: 用两个栈实现一个队列。队列的声明如下,请实现他的两个函数 appendTail,deleteHead分别在队列的尾部插入数据,和队列头部删除数据。 输入: 1234, 输出: 1234; 解题思路: 队列是先进先出,栈是后入先出,我们的第一个栈专门用于插入数据,第二个用于存入第一个栈的出栈, 那么当我们要删除队头的时候,只需要从第二个栈中出栈就可以了 Java代码实现:

2016-06-13 11:50:12 296

原创 面试题八 旋转数组的最小数字

题目: 输入一个按递增排序数组的一个旋转,输出该数组的最小数字。 输入: 12345的旋转可以是34512,所以我们输入34512. 输出: 1 解题思路: 较为直观的方法是每一个数据都扫描一遍,找到最小的元素,这样的时间复杂度为0(N),但是可以 利用2分法,用两个指针分别指向数组的第一个元素和最后一个元素,接着我们找到指针之间的中间元素,通过判断中间元素是大于第一个指针来判断是在

2016-06-13 11:32:49 379

原创 面试题五 从头到尾打印单链表

题目: 输入一个单链表从头到尾,从头到尾打印单链表的每个值 输入: 由于我的单链表是使用头插法的,所以当你输入4321的时候,节点从左到右的顺序是1234,所以,当我们输入4321的时候,只要保证输入和输出一样就完全正确 输出: 跟输入一样 实现思路: 在不修改数据结构的前提下,有两种方式,一种是利用栈,因为栈后进先出的缘故,我们可以把单链表扫一遍,然后存入栈后依次出栈,第二个可以用

2016-06-13 11:01:46 646

原创 面试题四 替换字符中的空格

题目: 请实现一个函数,把字符串中的每个空格替换成“%20”,例如输入“Hello World” ,输出“Hello%20World 输入: Hello World 输出: Hello World 实现思路: 一般我们可以用遍历的方法来实现,但是字符串较长时会出现大规模的移动,其次时间复杂度为O(N的2次方)。我们可以有更好的方法,就是计算出 空格后字符的容量,然后声明两个指针,一个

2016-06-13 10:49:17 426

原创 剑指offerJava实现 二维数组的查找

序言 剑指offer上的题都非常经典,而且在一些大公司,也会出剑指offer上的原题,所以无论从研究和锻炼自己算法能力的还是提升自己求职竞争力的角度来说,都是非常有帮助的。 题目描述 在一个二维数组中,每一行都是从左到右递增,每一列都是从上到下递增,请完成一个函数,输入这样的二维数组和一个整数,判断数组中是否有该整数。 1   2    3   4 5   6    7   8 9  

2016-05-22 11:55:25 407

原创 数据结构 AVL树

前言 大家都玩过球球大作战的游戏吧,他的原型是Agar.IO,在这款游戏了我们扮演一个小球,刚出生的我们除了速度快,视野生存能力都一般,为了追求某种平衡,通过不断的吞噬其他小球来让自己变大,变长,但是我们的速度却在下降.这个追逐平衡的过程呢,就是我们今天的主题,AVL树,AVL树也叫二叉平衡树,是一种二叉排序树,其中每一个节点的左子树和右子树高度差至多等于1.这样做的好处是,我们的查找会非常方便

2016-05-10 10:55:15 829

原创 数据结构 二叉树

前言 再说二叉树遍历之前,先说一下二叉树的概念.二叉树是节点最多有两个子树的结构,他的子树一般称为左子树和右子树.二叉树的遍历 就是通过 二叉树的定义

2016-05-04 20:40:54 359

原创 基础数据结构之栈和队列

前言 我们生活中会遇见很多的看起来很棘手的问题,比如一堆尚未处理的邮件,正要去电影院排队购买一张电影票(两张也可以,你值得拥有...),这些我们用自己熟悉的方式来处理他们,而我们自己熟悉的这些方式,很可能就和栈和队列有关.今天,我们就来谈谈栈和队列. 栈的定义 栈是限定仅在表尾进行插入和删除操作的线性表,也称为LIFO(后入先出)结构. 我们把允许插入和删除的地方称之为栈顶,另一端称之为栈

2016-05-04 10:24:23 341

原创 Java数据结构之快速排序

前言      快速排序是面试中非常常见的排序算法,工作中,快速排序的效率也是我们常常用到的,他的发展来源于划分算法,采用的是分治策略. 实现思路     先从数组中选择一个pivot,    遍历数组,讲数组中比pivot大的数放到其右边,比其小的放到左边,    直到各区数组长度为1之前,都回到1处执行 具体说明 如上所示,我们先选择数组中第一个数49作为pivot,

2016-05-03 12:27:51 361

原创 Java数据结构 划分算法

前言 在现实生活中,当我们遇见好看的姑娘,我们很可能经验性的把她划分到美女一组里,而长相不那么给力的姑娘,分到别的组里,那么,分组的这么一个过程,其实就是划分算法,在划分算法里,我们往往需要一个pivot,来对姑娘进行分类,在这个例子中,pivot就是颜值. 实现思路 用线性结构存储数据.. 定义数据两端点的指针,分别为leftPar和rightPar,他们指向数据的起始位置0,和数据的结

2016-05-02 10:26:58 1094

原创 Java数据结构与算法之插入排序

前言 工作一段时间了,林林总总发现很

2016-04-26 17:45:38 392

2018最新全国行政区划代码sql文件

1、从国家统计局下载《最新县及县以上行政区划代码(截止2018年4月10日)》 2、转成utf-8文本 3、自编php程序,读取文本入库Mysql 4、4字段设计,简洁干净 5、无毒、无污染、无外挂 6、欢迎使用

2018-04-18

空空如也

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

TA关注的人

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