java
湘下农人
尽力而为还是全力以赴
展开
-
Java并发编程辅助:CountDownLatch、CyclicBarrier和 Semaphore
本文目录大纲:一.CountDownLatch用法二.CyclicBarrier用法三.Semaphore用法一.CountDownLatch用法CountDownLatch类位于java.util.concurrent包下,利用它可以实现类似计数器的功能。比如有一个任务A,它要等待其他4个任务执行完毕之后才能执行,此时就可以利用CountDownLatch来实现这种功能了。CountDownLa...转载 2018-05-17 18:49:41 · 88 阅读 · 0 评论 -
二叉树的最小深度
二叉树的最小深度为根节点到最近叶子节点的距离。样例给出一棵如下的二叉树: 1 / \ 2 3 / \ 4 5 这个二叉树的最小深度为 2import java.util.LinkedList;import java.util.Queue;/** * Definition for binary tree...原创 2018-05-19 22:16:19 · 940 阅读 · 0 评论 -
Evaluate the value of an arithmetic expression in Reverse Polish Notation. Valid operators are+,-,*,
Some examples: ["2", "1", "+", "3", "*"] -> ((2 + 1) * 3) -> 9 ["4", "13", "5", "/", "+"] -> (4 + (13 / 5)) -> 6import java.u原创 2018-05-20 21:56:48 · 299 阅读 · 0 评论 -
Given n points on a 2D plane, find the maximum number of points that lie on the same straight line.
/** * Definition for a point. * class Point { * int x; * int y; * Point() { x = 0; y = 0; } * Point(int a, int b) { x = a; y = b; } * } */import java.util.*;public class Solution { ...原创 2018-05-21 21:32:42 · 387 阅读 · 0 评论 -
Given a binary tree, return the postorder traversal of its nodes' values.
For example:Given binary tree{1,#,2,3}, 1 \ 2 / 3return[3,2,1].Note: Recursive solution is trivial, could you do it iteratively?递归方法/** * Definition for binary tree * public class T...原创 2018-05-25 21:46:58 · 245 阅读 · 0 评论 -
java中关于length,length(),size()区别
1 java中的length属性是针对数组说的,比如说你声明了一个数组,想知道这个数组的长度则用到了length这个属性.2 java中的length()方法是针对字符串String说的,如果想看这个字符串的长度则用到length()这个方法.3.java中的size()方法是针对泛型集合说的,如果想看这个泛型有多少个元素,就调用此方法来查看!这个例子来演示这两个方法和一个属性的用法public ...转载 2018-05-15 23:06:58 · 642 阅读 · 0 评论 -
Given a binary tree, return the preorder traversal of its nodes' values.
For example:Given binary tree{1,#,2,3}, 1 \ 2 / 3return[1,2,3].Note: Recursive solution is trivial, could you do it iteratively?/** * Definition for binary tree * public class TreeN...原创 2018-05-26 21:12:28 · 431 阅读 · 0 评论 -
Sort a linked list in O(n log n) time using constant space complexity.
归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。分而治之 可以看到这种结构很像一棵完全二叉树,本文的归并排序我们采用递归去实现(也可采用迭代的方式去实现)。分阶段可以理解为就...原创 2018-05-22 23:02:20 · 980 阅读 · 0 评论 -
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。
例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。1:123456789 public int minNumberInRotateArray(int[] array) { if (array.length == 0) return 0; for (...原创 2018-06-03 22:22:44 · 3785 阅读 · 1 评论 -
Given a singly linked list L: L 0→L 1→…→L n-1→L n, reorder it to: L 0→L n →L 1→L n-1→L 2→L n-2→… You
Given a singly linked list L: L 0→L 1→…→L n-1→L n,reorder it to: L 0→L n →L 1→L n-1→L 2→L n-2→…You must do this in-place without altering the nodes' values.For example,Given{1,2,3,4}, reorder it to{1,...原创 2018-05-27 22:56:51 · 320 阅读 · 0 评论 -
Sort a linked list using insertion sort.
插入排序:每一趟将一个待排序的记录,按照其关键字的大小插入到有序队列的合适位置里,知道全部插入完成。 在讲解直接插入排序之前,先让我们脑补一下我们打牌的过程。先拿一张5在手里,再摸到一张4,比5小,插到5前面,摸到一张6,嗯,比5大,插到5后面,摸到一张8,比6大,插到6后面,以上的过程,其实就是典型的直接插入排序,每次将一个新数据插入到有序队列中的合适位置里。/** * Definition f...原创 2018-05-23 22:16:36 · 177 阅读 · 0 评论 -
输入一个整数数组,实现一个函数来调整该数组中数字的顺序
方法一:public class Solution { public void reOrderArray(int [] array) { if(array.length==0)return; if(array.length==1)return; int []jishu=new int[array.length]; int []oushu...原创 2018-06-11 15:10:52 · 665 阅读 · 0 评论 -
输入一个链表,输出该链表中倒数第k个结点。
/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/第一种方法:public class Solution { public ListNode FindKthToTai...原创 2018-06-11 16:00:43 · 95 阅读 · 0 评论 -
输入一个链表,反转链表后,输出链表的所有元素。
/* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } }*/ public class Solution { pu...转载 2018-06-11 17:01:31 · 439 阅读 · 0 评论 -
二维数组中的查找 java
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。思路:从左下角开始比较 public class Solution { public boolean Find(int [][] array,int target) { int len = arr...原创 2018-05-28 22:39:45 · 121 阅读 · 0 评论 -
子类调用父类方法探讨
假设A是父类,B是继承A的子类,那么B如果要调用A的a方法,应该这样:B b=new B();b.a();一直都说this指的是当前对象,super指的是父类对象。但是对这个this理解还是不透彻,今天看effective java 第14条,有个例子一直不理解:[java] view plain copypackage com.zgd; public class SuperTest { ...原创 2018-05-29 15:57:33 · 476 阅读 · 0 评论 -
Java数组与vector互转,再排序
/*Object[] object1 = null ; //数组定义Vector<Object> object2;//Vector定义object2 = new Vector<Object>(Arrays.asList(object1));// array -> vectorobject1 = object2 .toArray( new Object[obje...原创 2018-05-24 22:21:30 · 1702 阅读 · 0 评论 -
StringBuffer的用法
1、StringBuffer对象的初始化StringBuffer对象的初始化不像String类的初始化一样,Java提供的有特殊的语法,而通常情况下一般使用构造方法进行初始化。例如:StringBuffer s = new StringBuffer();这样初始化出的StringBuffer对象是一个空的对象,就是我犯的错误。如果需要创建带有内容的StringBuffer对象,则可以使用:Stri...转载 2018-05-29 22:29:02 · 157 阅读 · 0 评论 -
请实现一个函数,将一个字符串中的空格替换成别的字符
请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。public class Solution { public String replaceSpace(StringBuffer str) { if(str==null){ return null; ...原创 2018-05-29 22:56:43 · 1233 阅读 · 0 评论 -
斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。
大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。n<=39这个题可以说是迭代(Iteration) VS 递归(Recursion),f(n) = f(n-1) + f(n-2),第一眼看就是递归啊,简直完美的递归环境,递归肯定很爽,这样想着关键代码两三行就搞定了,注意这题的n是从0开始的:方法一:递归12345678910if(n<=1){ ret...原创 2018-06-05 23:46:03 · 9429 阅读 · 1 评论 -
Java volatile关键字解惑
当一个共享变量被volatile修饰时,它会保证修改的值立即被更新到主存“, 这里的”保证“ 是如何做到的?和 JIT的具体编译后的CPU指令相关吧? volatile特性 内存可见性:通俗来说就是,线程A对一个volatile变量的修改,对于其它线程来说是可见的,即线程每次获取volatile变量的值都是最新的。 volatile的使用场景 通过关键字sychronize可以防止多个线程...转载 2018-05-30 19:42:57 · 108 阅读 · 0 评论 -
输入一个链表,从尾到头打印链表每个节点的值。
/*** public class ListNode {* int val;* ListNode next = null;** ListNode(int val) {* this.val = val;* }* }**/import java.util.Stack;import java.util.ArrayL...原创 2018-05-30 21:47:49 · 120 阅读 · 0 评论 -
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
比较倾向于找规律的解法,f(1) = 1, f(2) = 2, f(3) = 3, f(4) = 5, 可以总结出f(n) = f(n-1) + f(n-2)的规律,但是为什么会出现这样的规律呢?假设现在6个台阶,我们可以从第5跳一步到6,这样的话有多少种方案跳到5就有多少种方案跳到6,另外我们也可以从4跳两步跳到6,跳到4有多少种方案的话,就有多少种方案跳到6,其他的不能从3跳到6什么的啦,所...原创 2018-06-06 22:25:26 · 3794 阅读 · 1 评论 -
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
因为n级台阶,第一步有n种跳法:跳1级、跳2级、到跳n级跳1级,剩下n-1级,则剩下跳法是f(n-1)跳2级,剩下n-2级,则剩下跳法是f(n-2)所以f(n)=f(n-1)+f(n-2)+...+f(1)因为f(n-1)=f(n-2)+f(n-3)+...+f(1)所以f(n)=2*f(n-1)public class Solution { public int JumpFloorII(i...原创 2018-06-07 21:08:54 · 220 阅读 · 0 评论 -
用两个栈来实现一个队列,完成队列的Push和Pop操作。队列中的元素为int类型。
import java.util.Stack; //使用栈记得引用java.util,Stack包 public class Solution { Stack<Integer> stack1 = new Stack<Integer>(); //当做主队列 Stack<Integer> stack2 = new Stack<Intege...原创 2018-05-31 22:10:11 · 2468 阅读 · 0 评论 -
判断double值是否是一个非数字值以及Double.parseDouble()与Double.valueOf()
isNaN方法判断如果double值是一个非数字(NaN)值,则返回true;否则返回false。语法 public boolean isNaN() 返回值:如果double值是一个非数字(NaN)值,则返回true;否则返回false。示例 本示例创建Double对象d1,并通过Double类的isNaN 方法判断对象d1的参数值是否是数字,然后将结果赋给boolean型变量。Double ...转载 2018-06-01 20:45:39 · 3433 阅读 · 0 评论 -
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。
Arrays.copyOfRange(T[ ] original,int from,int to)将一个原始的数组original,从小标from开始复制,复制到小标to,生成一个新的数组。注意这里包括下标from,不包括下标to。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉...原创 2018-06-01 23:15:06 · 729 阅读 · 0 评论 -
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
方法一:public class Solution { public int NumberOf1(int n) { int t=0; char[]ch=Integer.toBinaryString(n).toCharArray(); for(int i=0;i<ch.length;i++){ if(...原创 2018-06-08 22:38:41 · 180 阅读 · 0 评论 -
基数排序
(一)基数排序的思想:把待排序的整数按位分,分为个位,十位.....从小到大依次将位数进行排序。实际上分为两个 过程:分配和收集。 分配就是:从个位开始,按位数从小到大把数据排好,分别放进0--9这10个桶中; ...转载 2018-06-29 16:02:00 · 543 阅读 · 0 评论 -
java 内部类和静态内部类的区别
内部类(Inner Class)和静态内部类(Static Nested Class)的区别:定义在一个类内部的类叫内部类,包含内部类的类称为外部类。内部类可以声明public、protected、private等访问限制,可以声明 为abstract的供其他内部类或外部类继承与扩展,或者声明为static、final的,也可以实现特定的接口。外部类按常规的类访问方式使用内部 类,唯一的差别是外部...转载 2018-06-10 16:16:52 · 162 阅读 · 0 评论 -
二分法查找
(1)确定该区间的中点位置:mid=(low+high)/2 min代表区间中间的结点的位置,low代表区间最左结点位置,high代表区间最右结点位置(2)将待查a值与结点mid的关键字(下面用R[mid].key)比较,若相等,则查找成功,否则确定新的查找区间:如果R[mid].key>a,则由表的有序性可知,R[mid].key右侧的值都大于a,所以等于a的关键字如果存在,必然在R...转载 2018-06-29 17:13:34 · 356 阅读 · 0 评论 -
有一楼梯共m级,刚开始时你在第一级,若每次只能跨上一级或者二级,要走上m级,共有多少走法?
有一楼梯共m级,刚开始时你在第一级,若每次只能跨上一级或者二级,要走上m级,共有多少走法?注:规定从一级到一级有0种走法。 给定一个正整数int n,请返回一个数,代表上楼的方式数。保证n小于等于100。为了防止溢出,请返回结果Mod 1000000007的值。 我们走的最后一步,有几种可能。就是两种,一种是走一步,一种是走两步。拿我们走到十台阶的可能数就可以分为两类F(8)和F(9)。那么我们F...转载 2018-07-08 10:34:00 · 5383 阅读 · 1 评论 -
击鼓传花
题目描述学校联欢晚会的时候,为了使每一个同学都能参与进来,主持人常常会带着同学们玩击鼓传花的游戏。游戏规则是这样的:n个同学坐着围成一个圆圈,指定一个同学手里拿着一束花,主持人在旁边背对着大家开始击鼓,鼓声开始之后拿着花的同学开始传花,每个同学都可以把花传给自己左右的两个同学中的一个(左右任意),当主持人停止击鼓时,传花停止,此时,正拿着花没传出去的那个同学就要给大家表演一个节目。聪明的小赛提出一...转载 2018-07-08 10:55:36 · 388 阅读 · 0 评论 -
军训队列
某大学开学进行军训队列训练,将学生从一开始按顺序依次编号,并排成一行横队,训练的规则如下:从头开始一至二报数,凡报到二的出列剩下的依次向前靠拢,再从头开始进行一至三报数,凡报到三的出列,剩下的依次向前靠拢,继续从头开始进行一至二报数。。。以后每次从头开始轮流进行一至二报数、一至三报数直到剩下的人数不超过三人为止。 输入 第一行为组数N,接着为N行学生人数,学生人数不超过...转载 2018-07-08 12:54:54 · 1134 阅读 · 0 评论 -
java从字符串中提取数字
1 String类提供的方法:import Java.util.*;public class get_StringNum { public static void main(String[] args) {String str = "love23next234csdn3423javaeye";str=str.trim();String str2="";if(str != null &&am...转载 2018-07-08 15:47:07 · 6869 阅读 · 0 评论 -
java提取字符串中的字母数字
String str = "adsf adS DFASFSADF阿德斯防守对方asdfsadf37《?:?@%#¥%#¥%@#$%#@$%^><?1234"; str = str.replaceAll("[^a-zA-Z0-9]", ""); System.out.println(str);1.判断字符串中是否全为英文boolean result = str.matches(...转载 2018-07-08 15:59:48 · 17864 阅读 · 1 评论 -
约德尔测试
兰博和提莫闲聊之后,回归到了他们的正题,约德尔人的未来。说起约德尔人的未来,黑默丁格曾经提出了一个约德尔测试,将约德尔人的历史的每个阶段都用一个字符表达出来。(包括可写字符,不包括空格。)。然后将这个字符串转化为一个01串。转化规则是如果这个字符如果是字母或者数字,这个字符变为1,其它变为0。然后将这个01串和黑默丁格观测星空得到的01串做比较,得到一个相似率。相似率越高,则约德尔的未来越光明。请...原创 2018-07-08 17:15:43 · 127 阅读 · 0 评论 -
单链表的实现
一、单链表的概念 链表是最基本的数据结构,其存储的你原理图如下图所示 上面展示的是一个单链表的存储原理图,简单易懂,head为头节点,他不存放任何的数据,只是充当一个指向链表中真正存放数据的第一个节点的作用,而每个节点中都有一个next引用,指向下一个节点,就这样一节一节往下面记录,直到最后一个节点,其中的next指向null。 链表有很多种,比如...转载 2018-07-02 16:44:32 · 222 阅读 · 0 评论 -
直接插入排序
public void InserSort(int n){int i,j;RecordType<T> temp;for(i=1,i<n;n++){for(j=i;j>0&&elem.get(j-1).key.compareTo(elem.get(j).key)>0;j--){temp=elem.get(j-1);elem.set(j-1,elem.ge...原创 2018-06-28 10:27:47 · 138 阅读 · 0 评论 -
希尔排序
具体流程如下: 1、将包含n个元素的数组,分成n/2个数组序列,第一个数据和第n/2+1个数据为一对... 2、对每对数据进行比较和交换,排好顺序; 3、然后分成n/4个数组序列,再次排序; 4、不断重复以上过程,随着序列减少并直至为1,排序完成。 假如有初始数据:25 11 45 26 12 78。 1、第一轮排序,将该数组分成 6/2=3 个数组序列,第1个数据和...转载 2018-06-28 15:23:22 · 123 阅读 · 0 评论