上一页 1 ··· 4 5 6 7 8 9 10 11 12 13 下一页
摘要: 问题描述:给定一个有序序列,找到指定元素的起始和结束位置。例如:1234555,5,起始4结束6 算法分析:其实就是一个二分查找的利用。但是特殊就在不是找到某个元素,而是找到下标。也就是在nums[mid]=target时,要分析mid的左右元素。 阅读全文
posted @ 2016-06-11 14:35 32ddd 阅读(352) 评论(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 阅读(192) 评论(0) 推荐(0) 编辑
摘要: 问题描述:寻找反转序列中最小的元素。 算法分析:和寻找某个数是一个道理,还是利用二分查找,总体上分两种情况。nums[left]<=nums[mid],else。但是,在截取子序列的时候,有可能得到一个顺序序列。如34512,截取后得到12,此时要对这种情况判断,因为是顺序的,所以,最左边的元素就是 阅读全文
posted @ 2016-06-09 15:37 32ddd 阅读(221) 评论(0) 推荐(0) 编辑
摘要: 问题描述:反转序列,但是有重复的元素,例如序列13111。 算法思路:如果元素有重复,那么left-mid,就不一定是有序的了,所以不能利用二分搜索,二分搜索必须是局部有序。针对有序序列的反转,如果有重复数据的话,那么必然是nums[left]=nums[mid]=nums[right],增加对这种 阅读全文
posted @ 2016-06-09 14:52 32ddd 阅读(168) 评论(0) 推荐(0) 编辑
摘要: 问题描述:一个有序序列经过反转,得到一个新的序列,查找新序列的某个元素。12345->45123。 算法思想:利用二分查找的思想,都是把要找的目标元素限制在一个小范围的有序序列中。这个题和二分查找的区别是,序列经过mid拆分后,是一个非连续的序列。特别要注意target的上下限问题。因为是非连续,所 阅读全文
posted @ 2016-06-08 21:51 32ddd 阅读(320) 评论(0) 推荐(0) 编辑
摘要: 问题描述:求括号字符串中最长合法子串长度。例如:()((),返回2,而不是4. 算法分析:还是利用栈,和判断合法括号对是一样的。 阅读全文
posted @ 2016-06-08 19:41 32ddd 阅读(205) 评论(0) 推荐(0) 编辑
摘要: 问题描述:给定一个数组,数组里面元素不重复,求第k个全排列。 算法分析:这道题就是用到取商取模运算。 阅读全文
posted @ 2016-06-06 20:18 32ddd 阅读(307) 评论(0) 推荐(0) 编辑
摘要: 问题描述:给定一个数组,数组里面有重复元素,求全排列。 算法分析:和上一道题一样,只不过要去重。 阅读全文
posted @ 2016-06-06 20:16 32ddd 阅读(333) 评论(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 阅读(254) 评论(0) 推荐(0) 编辑
摘要: 问题描述:给定一个数组是一个全排列,寻找下一个全排列。例如123->132, 321->123, 115->151. 算法分析:从后往前寻找顺序,找到后从往前寻找第一个大于当前元素,即第一个逆序,然后元素交换,重新sort当前元素后面的元素。如果都是逆序,reverse数组。 阅读全文
posted @ 2016-06-06 20:03 32ddd 阅读(586) 评论(0) 推荐(0) 编辑
上一页 1 ··· 4 5 6 7 8 9 10 11 12 13 下一页