自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

zengzhen_CSDN的博客

不积跬步,无以至千里;不积小流,无以成江海。

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

原创 2017校招总结

代码 二分查找、快速排序、选择排序、其他临场代码语言 基本数据类型、集合类、HashMap/CurrentHashMap、多线程、JVM内存模型及运行时的数据区、垃圾回收、ThreadLocal、单例代码、抽象类接口区别、面向对象特点、IO/NIO、泛型、Java8新特性、反射、异常、String不可变、类加载机制设计模式 23种,有哪些,用过哪些,怎么用的项目 MVC模型,ssh框架原理及

2016-10-19 15:12:31 662

原创 网易校园招聘2017编程题--回文数问题

import java.util.Scanner;public class Test{ public static int count(int[] nums){ int lo = 0; int hi = nums.length - 1; int count = 0; while(lo <= hi){ if

2016-09-12 21:58:05 908

原创 美团点评2017校园招聘编程题--取红包

题目: 圆桌上放了一圈红包形成环形,每个红包金额不同,围绕圆桌走一圈选择若干红包,规则是不能拿相邻的红包,请问拿到红包最多的总金额是多少?输入: 红包个数N N行数组表示N个红包输出: 最多的总金额样例输入: 2 1,2 1,3,4样例输出: 2 4代码: import java.util.Scanner;public class Test{ private stati

2016-09-11 20:28:08 1577

原创 京东2017校园招聘编程题--幸运数

题目: 4和7是两个幸运数字,我们定义,十进制表示中,每一位只有4和7两个数的正整数都是幸运数字。前几个幸运数字是:4,7,44,47,74,77,444,447…输入: 数字k输出: 第k个幸运数样例输入: 3 5 100 10000000 样例输出: 74 744747 44774447447477474444447思路: 使用完全二叉树的思想,假设根节点为第

2016-09-06 15:07:13 1798

原创 采苹果问题

题目: 平面上有N*M个格子,每个格子中放着一定数量的苹果。你从左上角的格子开始, 每一步只能向下走或是向右走,每次走到一个格子上就把格子里的苹果收集起来, 这样下去,你最多能收集到多少个苹果。思路: 解这个问题与解其它的DP问题几乎没有什么两样。第一步找到问题的“状态”, 第二步找到“状态转移方程”,然后基本上问题就解决了。首先,我们要找到这 个问题中的“状态”是什么?我们必须注意到的一点是,

2016-08-31 20:50:06 653

原创 寻找Coder

题目: 请设计一个高效算法,再给定的字符串数组中,找到包含”Coder”的字符串(不区分大小写),并将其作为一个新的数组返回。结果字符串的顺序按照”Coder”出现的次数递减排列,若两个串中”Coder”出现的次数相同,则保持他们在原数组中的位置关系。给定一个字符串数组A和它的大小n,请返回结果数组。保证原数组大小小于等于300,其中每个串的长度小于等于200。同时保证一定存在包含coder的字符

2016-08-28 18:10:56 536

原创 二叉树最低公共父节点

如果给定pRoot是NULL,即空树,则返回的公共节点自然就是NULL; 如果给定pRoot与两个节点中任何一个相同,说明,pRoot在就是所要找的两个节点之一,则直接返回pRoot,表明在当前链路中找到至少一个节点; 如果给定pRoot不是两个节点中任何一个,则说明,需要在pRoot的左右子树中重新查找,此时有三种情况:两个节点都在左子树上;两个节点都在右子树上;一个在左子树,一个在右子树上;

2016-08-28 14:56:49 1094

原创 蛇形数组

import java.util.Scanner;public class Test{ static void snakeMatrix(int row, int col){ int x,y;//维度 int[][] numberMatric = new int[row][col]; int num = numberMatric[x = 0][y

2016-08-17 17:07:29 413

原创 质因数分解和N以内的质数

/*质因数分解*/List<Integer> decPrime(int n) { List<Integer> list = new ArrayList<Integer>(); for (int i=2;i <= n;i++){ while(n != i){ if(n%i == 0){

2016-08-13 16:38:27 459

原创 二叉树镜像(交换左右子树)

//非递归public void mirror(TreeNode root){ Stack<TreeNode> stack = new Stack<>(); if(root == null) return; stack.push(root); while(!stack.isEmpty()) { TreeNode node = stack.p

2016-05-14 11:46:22 706

原创 二叉树迭代遍历

struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {} };/*前序*/vector<int> preorderTraversal(TreeNode *root) { vector

2016-05-11 19:40:55 362

原创 链表实现归并(快速、插入)排序

归并排序思路: 1)将待排序数组(链表)取中点并一分为二; 2)递归地对左半部分进行归并排序; 3)递归地对右半部分进行归并排序; 4)将两个半部分进行合并(merge),得到结果。代码编写分为以下三步: 1)找到链表中点 (快慢指针思路,快指针一次走两步,慢指针一次走一步,快指针在链表末尾时,慢指针恰好在链表中点); 2)写出merge函数,即如何合并链表; 3)写出mergeso

2016-05-10 19:13:51 790

原创 逆波兰表达式计算

题目: Evaluate the value of an arithmetic expression in Reverse Polish Notation. Valid operators are+,-,*,/. Each operand may be an integer or another expression. Some examples: [“2”, “1”, “+”, “3”

2016-05-10 11:10:03 569

原创 《编程之美》——二叉搜索树转换为排序双向链表

题目: 输入一棵二叉搜索树,将该二叉搜索树转换为一个排序的双向链表。要求不能创建任何新的节点,只能调整树中指针的指向。分析与解法: 1、由于要求链表是有序的,可以借助二叉树中序遍历,因为中序遍历算法的特点就是从小到大访问结点。当遍历访问到根结点时,假设根结点的左侧已经处理好,只需将根结点与上次访问的最近结点(左子树中最大值结点)的指针连接好即可。进而更新当前链表的最后一个结点指针。 2、由

2016-04-20 10:26:42 4368 2

原创 Java字符串反转

/*递归1*/String reverse1(String s){ int len = s.length(); if(len <= 1 || s == null)//注意递归结束条件 return s; String left = s.substring(0, length / 2); String right = s.substring(leng

2016-04-12 19:38:40 340

原创 华为OJ——合唱队

题目: N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学不交换位置就能排成合唱队形。合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1, 2, …, K,他们的身高分别为T1, T2, …, TK,则他们的身高满足T1 < T2 < … < Ti , Ti > Ti+1 > … > TK (1 <= i <= K) 。 你的任务是,已知所有N位同学的身高,计算最

2016-03-25 11:28:36 566

原创 括号字符串匹配

题目: 判断一个括号字符串是否匹配正确,假设括号有多种。如(([]))正确,[[(()错误。代码:#include<iostream>#include<string>#include<stack>using namespace std;bool IsMatch(string str){ int i=0; stack<char> stk; bool flag=true;

2016-03-23 09:52:48 468

原创 搜狐Java开发实习生笔试题

1、CocurrentHashMap是基于Lock/Unlock思想的线程安全的Map实现。 而不是symchronized、Object.wait、CAS。2、下面程序执行结果public class Test{ static int value = 0; static int inc(){return value++;} static int dec(){return

2016-03-19 20:33:16 3492

原创 《剑指offer》——二叉树的下一个结点

题目: 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。思路: 分析二叉树的下一个节点,一共有以下情况: 1.二叉树为空,则返回空; 2.节点右孩子存在,则设置一个指针从该节点的右孩子出发,一直沿着指向左子结点的指针找到的叶子节点即为下一个节点; 3.节点不是根节点。如果该节点是其父节点的左孩子,则返

2016-03-16 19:51:24 427

原创 《剑指offer》——删除链表中重复的结点

题目: 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5。思路: 因为重复结点不保留且有可能从头结点开始重复,所以应当新建一个结点位于头结点的之前,从新建的结点开始遍历。因为要将重复的结点全部删除,所以要设置一个结点pNode指向当前结点,然后再一个结点preNode指向当

2016-03-15 19:31:20 505

原创 《剑指offer》——字符流中第一个不重复的字符

题目: 请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符”go”时,第一个只出现一次的字符是”g”。当从该字符流中读出前六个字符“google”时,第一个只出现一次的字符是”l”。思路: 首先应当明确,字符流是指像流水一样的字符,一去不复返,意味着只能访问一次。 使用数组来标记各个字符对应的状态-1:表示出现0次-2:表示出现1次以上0~n:表示出

2016-03-12 17:32:37 624

原创 《剑指offer》——正则表达式匹配

题目: 请实现一个函数用来匹配包括’.’和’‘的正则表达式。模式中的字符’.’表示任意一个字符,而’‘表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串”aaa”与模式”a.a”和”ab*ac*a”匹配,但是与”aa.a”和”ab*a”均不匹配。思路: 假设字符串为str,模式串为pattern,考虑以下情况:A. 模式串下一个字符为*

2016-03-11 19:29:51 453

原创 《剑指offer》——构建乘积数组

题目: 给定一个数组A[0,1,…,n-1],请构建一个数组B[0,1,…,n-1],其中B中的元素B[i]=A[0]A[1]…A[i-1]A[i+1]…A[n-1]。不能使用除法。由题目可知,B[i]即为A中除A[i]以外剩下元素的乘积。可以构建两个辅助数组forward和backward,forward用于存储A中前i-1个元素的乘积,back用于存储A中倒数i个(n-i个)元素的乘积,然后再

2016-03-10 19:51:01 346

原创 《剑指offer》——数组中重复的数字

题目: 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是重复的数字2或者3。根据题目中的信息,数组长度为n,所有数字都在0到n-1之间,可以利用现有数组设置标志,当一个数字被访问过后,可以设置对应位上的

2016-03-09 19:18:21 836

原创 Java5实现阻塞队列

BlockingQueue 当生产者线程试图向BlockingQueue中放入元素时,如果该队列已满,则该线程被阻塞,对应put方法; 当消费者线程试图从BlockingQueue中取出元素时,如果该队列已空,则该线程被阻塞,对应take方法。import java.util.concurrent.locks.Condition;import java.util.concurrent.lock

2016-03-07 14:56:26 384

原创 《疯狂Java讲义》——控制线程

join Thread类的join方法提供了让一个线程等待另一个线程完成的功能。public class Test extends Thread{ public Test(String name) { super(name); } public void run() { for(int i = 0; i < 100; i++

2016-03-06 19:31:16 427

原创 《疯狂Java讲义》——闭包和回调

非静态内部类不仅记录了其外部内的详细信息,还保留了一个创建非静态内部类对象的引用,并且可以调用外部类的private成员,可以把非静态内部类当成面向对象领域的闭包。于是客户类可以通过非静态内部类的引用来调用外部类,即回调。//教师接口interface Teachable{ void work();//work方法}//程序员类class Programmer{ priva

2016-03-06 17:09:24 420

原创 《疯狂JAVA讲义》——简单的客户端服务器连接

/*客户端*/import java.io.IOException;import java.io.PrintStream;import java.net.ServerSocket;import java.net.Socket;public class Server { public static void main(String[] args) throws IOE

2016-02-26 17:49:28 321

原创 《剑指offer》——左移字符串

题目:把字符串前面n个字符串转移到字符串的尾部。如“abcdefg”左移2位后变为“cdefgab”。以“abcdefg”左移2位后变为“cdefgab”为例,可以先把字符串分为两部分,前面2个字符”ab”为一部分,内部进行反转,得到”ba”;再把剩余部分字符进行反转,得到”gfedc”;最终将整个字符串进行反转,得到”cdefgab”。代码如下,/*字符串反转*/string ReverseSt

2016-02-24 20:06:48 398

原创 《剑指offer》——和为s的连续整数序列

题目:输入一个正整数s,打印出所有和为s的连续正数序列(至少含有两个数)。可以考虑用两个数small和big分别表示序列的最小值和最大值。首先把small初始化为1,big初始化为2。如果从small到big的序列和大于s,可以从序列中去掉最小值,将small的值增大;如果从small到big的序列和小于s,可以将big值增大,让序列包含新的值。因为序列至少有两个数字,所以small的值增加到(s+

2016-02-24 10:28:31 898

原创 《剑指offer》——数组中只出现一次的数字

题目:一个整型数组里除了两个数字之外,其他的数字都出现了偶数次。要求找出这两个 数字,且时间复杂度为O(n),空间复杂度为O(1)。如果题目中数组中只出现一次的数字只有一个,那么可以依次将数组中的每个数字进行异或操作,那么其他出现偶数次的数字会因为自身与自身的异或而被消除,则最终的结果为那个只出现一次的数字。当只出现一次的数字为两个时,最终的结果是这两个数字异或之后的结果。因为这两个数字不相等,那

2016-01-23 19:24:49 1144

原创 《剑指offer》——二叉树的深度

int TreeDepth(TreeNode* pRoot){ if(pRoot == NULL) return 0; int dLeft = TreeDepth(pRoot -> left); int dRight = TreeDepth(pRoot -> right); return(dLeft < dRight) ? (dRight + 1)

2016-01-23 16:04:04 367

原创 《剑指offer》——数字在排序数组中出现的次数

由排序数组可以想到使用二分查找法先查找到一个待查的数字,然后再确定该数字第一次出现的位置和最后一次出现的位置,相减即可得到该数字在排序数组中出现的次数。该方法的时间复杂度为o(logn)。 /*k第一次出现的下标*/int GetFirstK(vector<int> data, int lo, int hi, int k){ if(hi < lo)//如果k不存在该数组中,则返回-

2016-01-22 19:39:52 568

原创 《剑指offer》——两个链表的第一个公共结点

时间复杂度为O(m+n)。struct ListNode{ int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL){}};ListNode* FindFirstCommonNode( ListNode *pHead1, ListNode *pHead2) { Lis

2016-01-21 17:26:36 272

原创 《剑指offer》——数组中的逆序对

以数组{7,5,4,6}为例, 1. 将数组中的每个元素看作是一个子数组,一边将子数组排序(升序)后合并,一边统计逆序对。 2. 对合并后的子数组重复第一步。 其中,统计逆序对的方法如下,: 总结, 参考归并排序的代码可以得到如下代码:/*合并子数组,并统计逆序对的个数*/int merge(vector<int> &data, int lo, int mi, int hi,

2016-01-20 20:16:33 373

原创 《剑指offer》——第一个只出现一次的字符

题目:在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符的位置。若为空串或不存在只出现一次的字符,返回-1。/*时间复杂度为O(n),空间复杂度为O(1)*/int FirstNotRepeatingChar(string str) { if(str.length() == 0)//输入空串,返回-1 return -1;

2016-01-18 19:39:59 317

原创 《剑指offer》——二叉树中和为某一值的路径

题目:输入一棵二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。从树的根结点开始向下一直到叶子结点所经过的所有结点形成一条路径。 struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val

2016-01-08 12:03:50 360

原创 《剑指offer》——二叉搜索树的后序遍历序列

二叉搜索树: 它或者是一棵空树,或者是具有下列性质的二叉树。若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。 总结,如果数组中判定属于二叉搜索树右子树的部分中有大于其根节点的元素,则该序列一定不是该二叉搜索树的后序遍历序列。bool VerifySquenceOfBST(vect

2016-01-07 12:13:49 348

原创 《剑指offer》——顺时针打印矩阵

可以用一个循环来打印矩阵,每次打印矩阵中的一个圈。 /*输入一个矩阵matrix,将其按顺时针顺序存入一维数组array中*/vector<int> printMatrix(vector<vector<int>> matrix) { vector<int> array;//一维数组 if(matrix.empty()) return array;//

2016-01-05 11:50:18 325

原创 《剑指offer》——合并两个排序的链表

/*非递归*/struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL){}};ListNode* Merge(ListNode* pHead1, ListNode* pHead2){ //如果两个链表中有一个为空,则返回另一个 //如

2016-01-03 16:18:23 336

空空如也

空空如也

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

TA关注的人

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