自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

ONE_PIECE的专栏

Good good study

  • 博客(412)
  • 收藏
  • 关注

原创 剑指offer之找出数组中最小的n个数,之优先队列

这道题最简单的就是排序,时间复杂度O(nlogn)。不再讲述。这里可以使用优先队列,时间复杂度O(nlogk)。注意检验k的合法性,不然初始化队列时会报错。import java.util.ArrayList;import java.util.Collections;import java.util.PriorityQueue;import java.util.Queue;public ...

2018-05-28 18:43:36 746

原创 剑指offer之找出无序数组中出现次数超过一半的数字

最简单也最容易想到的做法,就是先排序,如果存在的话,中间的数字肯定是要求的数字,然后再遍历一遍数组进行验证即可。但是这种做法,时间复杂度是O(nlogn)。import java.util.ArrayList;import java.util.Arrays;import java.util.Collections;import java.util.HashSet;public class...

2018-05-28 18:00:11 950

原创 剑指offer之字符串全排列

递归思想,把每个位置和后面的字符交换,即形成一个子排列。import java.util.ArrayList;import java.util.Collections;import java.util.HashSet;public class Solution { public ArrayList<String> Permutation(String str){ A...

2018-05-28 17:00:50 370

原创 剑指offer之二叉搜索树转双向链表

这道题,比较容易想到和中序遍历有关,毕竟中序遍历的顺序,即是排序好的二叉搜索树,重点在于如何改变二叉树的节点指向,这里使用一个前任节点,用来指向当前想成的有序链表的最后一个节点(可以这么理解)。每次遍历的时候改变指向即可。/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right...

2018-05-28 15:50:42 245

原创 剑指offer之复杂链表的复制

这道题一定要注意括号里面的东西,(输出结果中请不要返回参数中的节点引用)。也就是说,最后的返回的链表中的节点一定不能和原来链表中的某个节点指向同一个节点,即不能引用。所以必须分三步进行处理:1、复制每个节点,如:复制节点A得到A1,将A1插入节点A后面 2、遍历链表,A1->random = A->random->next; 3、将链表拆分成原链表和复制后的链表代码如下:/*p...

2018-05-03 20:30:41 203

原创 二叉树路径和为一固定值

二叉树类题目,第一反应肯定就是使用递归(dfs)。这道题也不例外。还是先给出我的代码。主要注意数组的引用性。所以每次都要去掉尾数。并在最后放入结果集中时,执行深copy。import java.util.ArrayList;/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode rig...

2018-04-14 20:49:07 518

原创 判断一个数组是不是二叉搜索树的后序遍历

这道题,首先,最重要的是。我们必须知道什么是二叉搜索树。这里给出百科:二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。然后问题就很明显了。肯定是前面一部分都...

2018-04-11 09:02:37 279

原创 二叉树层次遍历

这题没啥说的,借助一个队列就行了。但是由于我个人对于java的队列用的不是很好。用C++的queue思想写的,结果并不一样。注意java的collection的通用操作。add()和isEmpty()。queue的实现等。import java.util.ArrayList;import java.util.Deque;import java.util.LinkedList;/**publ...

2018-04-03 14:28:23 226

原创 判断一个序列是否是另外一个序列的出栈顺序

这道题其实也很简单。因为没有相等的数字。所以碰见相等就出栈。不等就入栈就行。最后还有元素,序列就肯定不对。import java.util.*;public class Solution { public boolean IsPopOrder(int [] pushA,int [] popA) { if(null == pushA){ return tr...

2018-04-02 15:11:11 501

原创 模拟最小栈

这个题其实很简单。最简单和最容易想的当然就是暴力了啊。也就是我的思路。import java.util.Stack;public class Solution { Stack<Integer> stacks = new Stack<>(); public void push(int node) { stacks.push(node);...

2018-04-02 11:54:10 188

原创 顺时针打印矩阵

这道题感觉没什么特殊的技巧,但是坑点比较多。首先要注意下标越界。其实注意下标在临界处的增减问题。import java.util.ArrayList;public class Solution { public ArrayList<Integer> printMatrix(int [][] matrix) { ArrayList<Integer> ...

2018-03-30 17:53:01 156

原创 判断B是否是A的子二叉树

这道题首先被一句话影响了。前序或者后序遍历,加上中序遍历可以确定一颗二叉树。这句话不假。但是我想当然的认为一个树的前序和中序都是。另外一个树的前序和中序的子序列。那就是子树。实际上随便画画就不对。比如{8,8,7,9,2,#,#,#,4,7}和{8,9,2}很明显就不对。然后就写了一个暴力递归。拿树A的每一个子树和树B做比较,如果每个节点都相等。则是子树。这里注意一点的是。树B到达尾节点的时候。树...

2018-03-29 21:25:19 279

原创 合并两个递增链表

由于递归思想没有根深蒂固,所以想了很久想到了一个非递归版本的。写的时候,由于java不是很好,一直在纠结java的赋值的引用性。其实不用纠结。再次赋值时,就指向另外的引用了,相互之间其实没有影响。/*public class ListNode { int val; ListNode next = null; ListNode(int val) { thi...

2018-03-29 16:42:40 316

原创 反转链表之java的copy。

这道题,我依然用的最暴力的方法,相当于重新构造了一个链表。因为之前写C++比较多,对于java的基础不是很好,这里因为要用到copy。用C++的链表思维理解可能会有偏差,这里简单讲一下java的三种copy:将一个对象的引用复制给另外一个对象,一共有三种方式。第一种方式是直接赋值,第二种方式是浅拷贝,第三种是深拷贝。所以大家知道了哈,这三种概念实际上都是为了拷贝对象啊。1、直接赋值。在Java中,...

2018-03-29 15:20:21 217

原创 求链表中第k个节点

这道题做法有很多种,首先讲一下像我这种脑子不是很好使的直白的做法。当然是先循环求出长度,再循环找到倒数第k个节点,即整数的n-k+1。/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/public c...

2018-03-28 22:11:15 871 1

原创 数值的整数次方之快速幂

这道题最简单的做法就是调用库函数,而且牛客上能AC。感觉不是这道题的考点,也有可能是牛客的时间卡的不够严格,就特意研究了下java的pow函数,据说内部也是用的移位实现,可见效率和快速幂应该差不太远。但是快速幂还是要掌握下。public class Solution { public double Power(double base, int exponent) { ret...

2018-03-28 12:28:29 356

原创 求一个数n中1的个数

这道题可以说是很经典的一道题了,大部分人应该会顺手想到n&(n-1)。但是不知道有人和我一样,好久没做题,只想到n&(n-1)。就是想不起来怎么求1的个数了。做法一:于是乎,先写了一个这样的常规思路代码。public class Solution { public int NumberOf1(int n) { if( 0 == n) ...

2018-03-26 17:27:59 597

原创 矩形覆盖

这道题,智商高些的大佬,可能分分钟就解决了,但是浪费了半天的时间。一开始想的肯定是这类题,要找规律,从一开始计算。然后就先找到n = 4的情况。然后突然想到f(4) = f(3) * 2;然后发现并不对。然后看到结果是少了,就想到肯定有重复。然后想到。f(4) = f(3) * 2 - f(2) + f(1);然后还是不对,这时候通过几次尝试的结果错误提示。瞎猜了下是f(4) = f(3) + f...

2018-03-26 14:41:57 135

原创 变态跳台阶

这题有多种做法,这里主要讲其中的两种。1、组合数学思想。除了最后一个台阶必须跳之外,其余的台阶我们既可以选择跳,也可以选择不跳,这样就是每个位置有两种选择,答案就是2^(n-1)。public class Solution { public int JumpFloorII(int target) { return 1<<(target-1); ...

2018-03-22 21:12:12 197

原创 旋转数组的最小数字

这道题最简单的做法,就是采取逆向思维。找第一个小于左边数字的数字,一定是最小的数字。因为本身是非递减排序数组。如果不存在这样一个数字,则说明这个数组肯定是正常的非递减排序数组,没有进行旋转。则最小数字肯定是第一个数字。import java.util.ArrayList;public class Solution { public int minNumberInRotateArray(i...

2018-03-21 12:16:55 228

原创 前序遍历二叉树

这道题要用到递归是肯定的,但是如果掌握的库函数够多还是可以简化代码的。首先讲一下最简单的,不知道数组的copy函数的情况下,最简单的做法:多写一个函数,肯定是必要的。主要注意要控制好下标的计算,不然很容易出错。/** * Definition for binary tree * public class TreeNode { * int val; * TreeNode le...

2018-03-17 20:03:49 198

原创 从尾到头打印链表,stack基本操作。

这道题熟悉容器的童鞋,第一反应当然是用stack。注意这里stack的基本使用和C++还是有些许不同的。import java.util.ArrayList;import java.util.Stack; public class Solution { public ArrayList<Integer> printListFromTailToHead(ListNode...

2018-03-17 17:07:28 149

原创 剑指offer之StringBuffer空格替换

这道题没什么难度,主要需要掌握下StringBuffer的用法,这里先讲下StringBuffer的用法:常用方法(1)构造函数StringBuffer有四个构造函数:StringBuffer() value内容为空,并设置容量为16个字节;StringBuffer(CharSequece seq)  使用seq初始化,容量在此基础上加16;StringBuffer(int capacity) 设...

2018-03-14 11:07:09 1294 1

原创 剑指offer之二维递增数组查找指定元素

这个题时间复杂度最低的做法当然是找到规律。因为横向元素都是递增,纵向元素也都是递增。所以我们应该找到一种方法,防止我们的遍历分叉。1、常规错误思路:从左上角第一个元素开始遍历,遍历到第一个大于目标元素的位置。目标元素在当前位置左下方。然后此时我们会选择向下遍历,遍历到第一个大于当前元素的位置。那么此时目标元素既可能存在于当前位置的左上方部分以及左下方部分。也就是分叉了,这个位置就相当于不起作用了。...

2018-03-13 18:18:39 315

原创 在服务器上连接并操作数据库

1、连接数据库和数据库基本操作mysql  -h hostname -P port -u username -p password例如: mysql -h 10.2.3.14 -P 3306 -u root  -p 123456 test#创建数据库create_db_sql="create database IF NOT EXISTS ${DBNAME}"mysql -h${HOSTNAME} ...

2018-03-12 21:42:53 13939

原创 基本编程环境搭建

本人是使用windows搭建的,其它环境的,仅给出方式,不确定有效。     JDK: 官网下载:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html             linux安装:$ cd ${home_path}$ wget --no-cookie --no-check...

2018-03-12 20:14:07 537

原创 cookie详解

cookie相关基本知识什么是cookie?Cookie是一小段文本信息。客户端请求服务器,如果服务器需要记录该用户状态,通过调用HttpServletResponse,向客户端浏览器颁发一个Cookie。客户端浏览器就会将浏览器保存起来。(一般来说会保存,会有失败的情况,后面进行特别讲解。)当客户端再次请求时,客户端就会连同cookie一起提交给服务器,服务器就可以根据该cookie...

2018-03-06 14:58:56 421

原创 工作常用工作管理软件介绍

jira: 先给个官方的让人搞不懂的解释:JIRA是Atlassian公司出品的项目与事务跟踪工具,被广泛应用于缺陷跟踪、客户服务、需求收集、流程审批、任务跟踪、项目跟踪和敏捷管理等工作领域。而实际上,这个主要针对于QA使用的,对于我们码农的用处,主要是看QA有没有给你提bug,解bug才是你工作最重要的事情。jira比较智能,当qa给你提bug之后,会给你的邮箱发送邮件。当你解决完bug之后,只...

2018-03-01 17:43:14 1008

原创 编程使用mac还是windows

    首先强调一下,本菜目前仍然在使用window编程。另外科普一下,什么是mac吧。怕有童鞋像本菜一样,大学毕业之后才见到mac本尊。这里仅仅说一下自己对于公司大部分人所使用mac的理解。    mac系统,也是一种类linux系统,所以首先它有强大的终端。这里终端和我们windows使用git bash编程有什么区别。git bash并不能使用ssh命令直接连接服务器,这里的原因和解决方案,...

2018-02-27 15:26:22 39835 14

原创 人人网笔试题第三题之找规律简单数论

选择题一通胡蒙,做了两道编程题,第三题不会,学的太差了,难受第三题是一个数论,之前数论题做得少,理论也懂,不会,先看代码:#include #include #include #include #include #include #include #include #include #include #include #include #pragma warnin

2017-03-19 22:53:03 646

转载 为什么优先使用组合而不是继承

继承具有如下优点:实现新的类非常容易,因为基类的大部分功能都可以通过继承关系自动赋予派生类;修改或者扩展继承来的实现非常容易;只要修改父类,派生的类的行为就同时被修改了。初学面向对象编程的人会认为继承真是一个好东西,是实现复用的最好手段。但是随着应用的深入就会发现继承有很多缺点:继承破坏封装性。基类的很多内部细节都是对派生类可见的,因此这种复用是“白箱复用”;如果基类的实现发生改变,那么派生类的实

2016-12-29 18:41:32 1725

原创 TCP为什么三次握手以及服务端如何知道客服端异常断开

1=.[1]TCP的三次握手最主要是防止已过期的连接再次传到被连接的主机。如果采用两次的话,会出现下面这种情况。比如是A机要连到B机,结果发送的连接信息由于某种原因没有到达B机;于是,A机又发了一次,结果这次B收到了,于是就发信息回来,两机就连接。传完东西后,断开。结果这时候,原先没有到达的连接信息突然又传到了B机,于是B机发信息给A,然后B机就以为和A连上了,这个

2016-12-29 18:35:58 596

原创 leetcode之数组中找出三个数之和为规定值

这个题可以用set里面套vector 进行去重,起初以为需要重载运算符,其实不用,所以挺简单的:class Solution {public: vector > threeSum(vector &num) { vector> v; set > hash; int n=num.size(); sort(num.begi

2016-11-20 17:44:28 1712 1

原创 leetcode之卡特兰数

这题用的一个递推关系是AC的,其实写一下很容易就能推出来公式,当然如果了解卡特兰公式的话可以很容易看出来,然后就可以用公式简化时间复杂度,这里我自己不是很了解卡特兰公式,所以用的递推,然后讨论下卡特兰公式:令h(0)=1,h(1)=1,catalan数满足递推式[1]  :h(n)= h(0)*h(n-1)+h(1)*h(n-2) + ... + h(n-1)*h(0) (

2016-11-18 13:08:43 1210

转载 fwrite/fread/fopen和write/read/open

转载出处:            http://blog.chinaunix.net/uid-26258259-id-4077259.htmlfread返回的是一个FILE结构指针而read返回的是一个int的文件号前者fopen/fread的实现是靠调用底层的open/read来实现的.fopen/fread是C标准的库函数,操作的对象是: file st

2016-10-17 22:36:55 439

原创 根据后序和中序建树

顺便写下后序和中序建树吧,都前面的大同小异。代码:/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NU

2016-10-12 22:18:31 663

原创 根据前序和中序建立二叉树

之前一直以为很简单,碰见的话肯定能写出来,结果今天面试竟然碰到了,写了半天硬是没写对,很是尴尬,其实和我最后想的分别记录前序数组的前后位置,以及后序数组的左右位置是一样的,当时又感觉不太对,没敢写,结果别面试跳过了。代码:/** * Definition for binary tree * struct TreeNode { * int val; * Tre

2016-10-12 22:01:56 1314

翻译 Linux下查看CPU使用率

转载出处:http://www.cnblogs.com/Wen-Man/archive/2011/04/04/2373771.html1.top使用权限:所有使用者使用方式:top [-] [d delay] [q] [c] [S] [s] [i] [n] [b]说明:即时显示process的动态d :改变显示的更新速度,或是在交谈式指令列( interactive com

2016-10-12 21:25:34 367

转载 SQL语句各个部分的执行顺序

原文地址:http://www.cnblogs.com/wuguanglei/p/4198272.html写在前面的话:有时不理解SQL语句各个部分执行顺序,导致理解上出现偏差,或者是书写SQL语句时随心所欲,所以有必要了解一下sql语句的执行顺序。可以有时间自己写一个简单的数据库,理解会更加深入。下面就写写我的一些理解,以SQL SERVER2008为例,进行说明。  先看下面这条简

2016-10-12 21:03:27 489

转载 守护进程概念,以及怎么创建守护进程

转载出处:http://www.cnblogs.com/mickole/p/3188321.html一,守护进程概述Linux Daemon(守护进程)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。它不需要用户输入就能运行而且提供某种服务,不是对整个系统就是对某个用户程序提供服务。Linux系统的大多数服务器就是通过守护进程实现的。常见的守护

2016-10-09 20:32:30 27117 1

空空如也

空空如也

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

TA关注的人

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