06 2016 档案

摘要:单链表的反转,每次循环需要四步骤。 阅读全文
posted @ 2016-06-30 15:29 32ddd 阅读(187) 评论(0) 推荐(0) 编辑
摘要:问题描述:s型遍历二叉树,或者反s型遍历二叉树 算法分析:层序遍历二叉树只需要一个队列,因为每一层都是从左往右遍历,而s型遍历二叉树就要用两个栈了,因为每次方向相反。 阅读全文
posted @ 2016-06-28 20:52 32ddd 阅读(627) 评论(0) 推荐(0) 编辑
摘要:线程通信有三种方法:一是利用Obeject的wait,notify,notifyAll。二是利用condition配合lock。三是利用BlockingQueue接口,put方法,take方法。 方法一: 方法二:由于Clock没有隐式的同步监视器,所有要借助Condition 方法三: 阅读全文
posted @ 2016-06-24 17:07 32ddd 阅读(175) 评论(0) 推荐(0) 编辑
摘要:方法一,同步代码块。方法二,同步方法。方法三,同步lock 同步代码块,synchronized在线程的run方法里。同步监视器是Account类。 同步方法,synchronized在主类里。同步监视器是调用这个方法的类,即this 同步锁使用Lock对象作为同步监视器,在finally里解锁 阅读全文
posted @ 2016-06-24 17:01 32ddd 阅读(210) 评论(0) 推荐(0) 编辑
摘要://子程序循环10次,接着主程序循环100次,然后子程序又循环10次,主程序循环100次,这样循环50次。 public class ThreadTest { public static void main(String[] args) { MyThread mythread = new MyThread(); new Thread(new Runnable()//传递给Thre... 阅读全文
posted @ 2016-06-24 16:51 32ddd 阅读(4630) 评论(0) 推荐(0) 编辑
摘要:MissingNumber问题描述:给定一个数组,数组数字范围是0-n,找到缺失的数字。例如nums={0,1,3},return2。 算法分析:第一种方法,对数组进行排序,然后找到和下标不一致的数字,下标即为缺失的数字。第二种方法,对于这样的数组,如果没有缺失数字,即使没有排序,下标-数字的差相加 阅读全文
posted @ 2016-06-23 18:23 32ddd 阅读(866) 评论(0) 推荐(0) 编辑
摘要:Combination问题描述:给定n和k,找出1-n之间所有k个数的组合,例如:n=3,k=2,返回 [[1,2] [1,3] [2,3]] 算法分析:利用递归。递归边界就是curr.size()==k。 CombinationSum问题描述:给一组数字和target,这组数字没有重复元素,找出这 阅读全文
posted @ 2016-06-20 14:36 32ddd 阅读(429) 评论(0) 推荐(0) 编辑
摘要:问题描述:n=1,返回“1”;n=2,返回“11”;n=3,返回“21”;n=4,返回1211,。。。。 算法分析:和斐波那契数列道理差不多,都是后一个要依赖前一个元素。因此可以使用递归,也可以使用迭代。 递归算法: 迭代算法: 阅读全文
posted @ 2016-06-14 15:44 32ddd 阅读(279) 评论(0) 推荐(0) 编辑
摘要:问题描述:填充数独表中空元素。空元素为'.' 算法分析:没填充一个数,都要看这个数所在的行,列,小矩阵是否合法。然后还要看整个数独表是否正确,而判断整个数独表只能通过递归,因为前一个结果的判断要依赖后一个结果。这应该属于动态规划问题。要递归回溯。 阅读全文
posted @ 2016-06-12 17:05 32ddd 阅读(163) 评论(0) 推荐(0) 编辑
摘要:问题描述:给定9x9矩阵,看是是否是有效数独,不用全部都填上数字,可以为. 算法分析:这道题就是判断,不难,有效数独三个充分条件,行,列,3*3子矩阵,都要满足数字不能重复。 还有一种方法,就是直接用set集合,判断元素是否重复。 阅读全文
posted @ 2016-06-12 14:41 32ddd 阅读(184) 评论(0) 推荐(0) 编辑
摘要:问题描述:给定一个有序序列,如果找到target,返回下标,如果找不到,返回插入位置。 算法分析:依旧利用二分查找算法。 阅读全文
posted @ 2016-06-11 15:22 32ddd 阅读(255) 评论(0) 推荐(0) 编辑
摘要:问题描述:给定一个有序序列,找到指定元素的起始和结束位置。例如:1234555,5,起始4结束6 算法分析:其实就是一个二分查找的利用。但是特殊就在不是找到某个元素,而是找到下标。也就是在nums[mid]=target时,要分析mid的左右元素。 阅读全文
posted @ 2016-06-11 14:35 32ddd 阅读(354) 评论(0) 推荐(0) 编辑
摘要:1 public int findMin(int[] nums) 2 { 3 return findMin(nums, 0, nums.length - 1); 4 } 5 public int findMin(int[] nums, int left, int right) 6 { 7 int mid = (left... 阅读全文
posted @ 2016-06-09 15:39 32ddd 阅读(193) 评论(0) 推荐(0) 编辑
摘要:问题描述:寻找反转序列中最小的元素。 算法分析:和寻找某个数是一个道理,还是利用二分查找,总体上分两种情况。nums[left]<=nums[mid],else。但是,在截取子序列的时候,有可能得到一个顺序序列。如34512,截取后得到12,此时要对这种情况判断,因为是顺序的,所以,最左边的元素就是 阅读全文
posted @ 2016-06-09 15:37 32ddd 阅读(223) 评论(0) 推荐(0) 编辑
摘要:问题描述:反转序列,但是有重复的元素,例如序列13111。 算法思路:如果元素有重复,那么left-mid,就不一定是有序的了,所以不能利用二分搜索,二分搜索必须是局部有序。针对有序序列的反转,如果有重复数据的话,那么必然是nums[left]=nums[mid]=nums[right],增加对这种 阅读全文
posted @ 2016-06-09 14:52 32ddd 阅读(171) 评论(0) 推荐(0) 编辑
摘要:问题描述:一个有序序列经过反转,得到一个新的序列,查找新序列的某个元素。12345->45123。 算法思想:利用二分查找的思想,都是把要找的目标元素限制在一个小范围的有序序列中。这个题和二分查找的区别是,序列经过mid拆分后,是一个非连续的序列。特别要注意target的上下限问题。因为是非连续,所 阅读全文
posted @ 2016-06-08 21:51 32ddd 阅读(321) 评论(0) 推荐(0) 编辑
摘要:问题描述:求括号字符串中最长合法子串长度。例如:()((),返回2,而不是4. 算法分析:还是利用栈,和判断合法括号对是一样的。 阅读全文
posted @ 2016-06-08 19:41 32ddd 阅读(206) 评论(0) 推荐(0) 编辑
摘要:问题描述:给定一个数组,数组里面元素不重复,求第k个全排列。 算法分析:这道题就是用到取商取模运算。 阅读全文
posted @ 2016-06-06 20:18 32ddd 阅读(309) 评论(0) 推荐(0) 编辑
摘要:问题描述:给定一个数组,数组里面有重复元素,求全排列。 算法分析:和上一道题一样,只不过要去重。 阅读全文
posted @ 2016-06-06 20:16 32ddd 阅读(337) 评论(0) 推荐(0) 编辑
摘要:问题描述:给定一个数组,数字中数字不重复,求所有全排列。 算法分析:可以用交换递归法,也可以用插入法。 递归法:例如,123,先把1和1交换,然后递归全排列2和3,然后再把1和1换回来。1和2交换,全排列1和3,再把1和2交换回来。1和3交换,全排列2和1,再把1和3交换回来。 插入法:例如123, 阅读全文
posted @ 2016-06-06 20:12 32ddd 阅读(258) 评论(0) 推荐(0) 编辑
摘要:问题描述:给定一个数组是一个全排列,寻找下一个全排列。例如123->132, 321->123, 115->151. 算法分析:从后往前寻找顺序,找到后从往前寻找第一个大于当前元素,即第一个逆序,然后元素交换,重新sort当前元素后面的元素。如果都是逆序,reverse数组。 阅读全文
posted @ 2016-06-06 20:03 32ddd 阅读(589) 评论(0) 推荐(0) 编辑
摘要:问题描述:给定一个字符数组words,和字符串s,返回字符数组中所有字符元素组成的子串在字符串中的位置,要求所有的字符串数组里的元素只在字符串s中存在一次。 算法分析:这道题和strStr很类似。只不过strStr是子串,而这个题是字符串数组里的元素组成的子串,字符串数组里的元素是无序的,但是必须全 阅读全文
posted @ 2016-06-04 21:59 32ddd 阅读(286) 评论(0) 推荐(0) 编辑
摘要:问题描述:求商,不能用乘法,除法,取模运算。 算法思路:不能用除法,那只能用减法,但是用减法,超时。可以用位移运算,每次除数左移,相当于2倍。 阅读全文
posted @ 2016-06-04 16:54 32ddd 阅读(701) 评论(0) 推荐(0) 编辑
摘要:堆排序算法后续补充。。。。 阅读全文
posted @ 2016-06-03 18:40 32ddd 阅读(206) 评论(0) 推荐(0) 编辑
摘要:public class MergeSort { public void mergeSort(int[]data, int left, int right) { if(left >= right) return; int mid = (left + right)/2; mergeSort(data, left, mid); ... 阅读全文
posted @ 2016-06-03 14:58 32ddd 阅读(1005) 评论(0) 推荐(0) 编辑
摘要:1 public int strStr(String haystack, String needle) { 2 3 if(haystack == null || needle == null) 4 { 5 return -1; 6 } 7 8 for (in... 阅读全文
posted @ 2016-06-01 16:08 32ddd 阅读(802) 评论(0) 推荐(0) 编辑
摘要:RemoveDuplicatesFromSortedArrayI: 问题描述:给定一个有序数组,去掉其中重复的元素。并返回新数组的长度。不能使用新的空间。 [1,1,2,3] -> [1,2,3] 3 算法思路:用一个数字记录新数组的最后一个元素的位置 与之类似的就是移除数组里某个元素。 Remov 阅读全文
posted @ 2016-06-01 14:41 32ddd 阅读(200) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示