自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(21)
  • 收藏
  • 关注

原创 快速排序完美优化版【JAVA】

相比较原始快排,这里优化了两个地方:优化1:为防止在近乎有序的数组,partition分割极度不平衡,可将v元素随机化选取优化2:递归到一定程度可使用插入排序另外为了方便大家理解partition过程,附图一张: public void quickSort(int[] nums){ if(nums == null || nums.length <=0)...

2018-08-31 21:13:19 1801 2

原创 【一次过】Lintcode 366. 斐波纳契数列

查找斐波纳契数列中第 N 个数。所谓的斐波纳契数列是指:前2个数是 0 和 1 。 第i个数是第i-1 个数和第i-2 个数的和。斐波纳契数列的前10个数字是:0, 1, 1, 2, 3, 5, 8, 13, 21, 34 ...样例给定1,返回0给定2,返回1给定10,返回34注意事项TheNth fibonacci number wo...

2018-08-30 22:17:32 166

原创 常用O(n^2)排序算法总结【JAVA版】

1、插入排序(初版) public void insertSort(int[] nums){ if(nums == null || nums.length&lt;=0) return; for(int i=1 ; i&lt;nums.length ; i++){ for(int j=i ; j&gt;0 ; j--){ ...

2018-08-30 21:47:14 249 1

原创 【总结】二叉树的前、中、后序遍历的递归实现与非递归JAVA实现

一、二叉树的前序遍历1、递归实现1:Traversepublic List<Integer> preorderTraversal(TreeNode root) { // write your code here List<Integer> list = new ArrayList<>(); ...

2018-08-30 10:49:38 227

原创 完美二分查找法【JAVA版】

public int binarySearch(int[] nums, int target) { // write your code here if(target&gt;nums[nums.length-1] || target&lt;nums[0]) return -1; int l = 0 , r ...

2018-08-29 19:49:28 213

原创 【两次过】Lintcode 7. 二叉树的序列化和反序列化

设计一个算法,并编写代码来序列化和反序列化二叉树。将树写入一个文件被称为“序列化”,读取文件后重建同样的二叉树被称为“反序列化”。如何反序列化或序列化二叉树是没有限制的,你只需要确保可以将二叉树序列化为一个字符串,并且可以将字符串反序列化为原来的树结构。样例给出一个测试数据样例, 二叉树{3,9,20,#,#,15,7},表示如下的树结构: 3 / \9 20 / ...

2018-08-28 11:29:16 174

原创 【两次过】Lintcode 4. 丑数 II

设计一个算法,找出只含素因子2,3,5的第n小的数。符合条件的数如:1, 2, 3, 4, 5, 6, 8, 9, 10, 12...样例如果n = 9, 返回10挑战要求时间复杂度为O(nlogn)或者O(n)注意事项我们可以认为1也是一个丑数解题思路:暴力解法不做介绍大家都可以想到,在该题会time limited。换一种思路是:所有的肯定都是由2,...

2018-08-25 11:24:25 147

原创 【一次过】Lintcode 50. 数组剔除元素后的乘积

给定一个整数数组A。定义B[i] = A[0] * ... * A[i-1] * A[i+1] * ... * A[n-1], 计算B的时候请不要使用除法。样例给出A=[1, 2, 3],返回 B为[6, 3, 2]解题思路:简单,两层循环即可。class Solution {public: /* * @param nums: Given an int...

2018-08-18 07:21:25 159

原创 【两次过】Lintcode 47. 主元素 II

给定一个整型数组,找到主元素,它在数组中的出现次数严格大于数组元素个数的三分之一。样例给出数组[1,2,1,2,1,3,3]返回 1挑战要求时间复杂度为O(n),空间复杂度为O(1)。注意事项数组中只有唯一的主元素解题思路1:一开始就想到使用哈希表存储,然后查找即可,时间复杂度为O(n),空间复杂度为O(n)。class Solution {publ...

2018-08-17 11:33:18 188

原创 【三次过】Lintcode 42. 最大子数组 II

给定一个整数数组,找出两个不重叠子数组使得它们的和最大。每个子数组的数字在数组中的位置应该是连续的。返回最大的和。样例给出数组[1, 3, -1, 2, -1, 2]这两个子数组分别为[1, 3]和[2, -1, 2]或者[1, 3, -1, 2]和[2],它们的最大和都是7挑战要求时间复杂度为 O(n)注意事项子数组最少包含一个数解题思路1...

2018-08-16 10:45:03 175

原创 【一次过】Lintcode 40. 用栈实现队列

正如标题所述,你需要使用两个栈来实现队列的一些操作。队列应支持push(element),pop() 和 top(),其中pop是弹出队列中的第一个(最前面的)元素。pop和top方法都应该返回第一个元素的值。样例比如push(1), pop(), push(2), push(3), top(), pop(),你应该返回1,2和2挑战仅使用两个栈来实现它,不使用任何其他数据...

2018-08-13 19:25:21 114

原创 【一次过】Lintcode 38. 搜索二维矩阵 II

写出一个高效的算法来搜索m×n矩阵中的值,返回这个值出现的次数。这个矩阵具有以下特性:每行中的整数从左到右是排序的。 每一列的整数从上到下是排序的。 在每一行或每一列中没有重复的整数。样例考虑下列矩阵:[ [1, 3, 5, 7], [2, 4, 7, 8], [3, 5, 9, 10]]给出target =3,返回2...

2018-08-13 16:41:05 1341

原创 【一次过】Lintcode 18. 子集 II

给定一个可能具有重复数字的列表,返回其所有可能的子集样例如果S = [1,2,2],一个可能的答案为:[ [2], [1], [1,2,2], [2,2], [1,2], []]挑战你可以同时用递归与非递归的方式解决么?注意事项子集中的每个元素都是非降序的 两个子集间的顺序是无关紧要的解集中不能包含重复子集解题思路:几乎与Lin...

2018-08-13 16:03:35 313

原创 【一次过】Lintcode 17. 子集

描述给定一个含不同整数的集合,返回其所有的子集子集中的元素排列必须是非降序的,解集必须不包含重复的子集您在真实的面试中是否遇到过这个题?是样例如果S = [1,2,3],有如下的解:[ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], []]挑战你可以同时用递归与非递归的方式解决么?解...

2018-08-13 15:55:02 252

原创 【两次过】Lintcode 508. 摆动排序

给你一个没有排序的数组,请将原数组就地重新排列满足如下性质nums[0] <= nums[1] >= nums[2] <= nums[3]....样例给出数组为nums=[3, 5, 2, 1, 6, 4]一种输出方案为[1, 6, 2, 5, 3, 4]注意事项请就地排序数组,也就是不需要额外数组解题思路1:我们可以先将数组排序,这时候...

2018-08-12 19:11:28 166

原创 【一次过】Lintcode 5. 第k大元素

在数组中找到第k大的元素样例给出数组[9,3,2,4,8],第三大的元素是4给出数组[1,2,3,4,5],第一大的元素是5,第二大的元素是4,第三大的元素是3,以此类推挑战要求时间复杂度为O(n),空间复杂度为O(1)注意事项你可以交换数组中的元素的位置解题思路1:看到找第K大的元素,第一反应是使用优先队列。时间复杂度为O(nlogn),空间复杂度...

2018-08-12 09:48:09 217

原创 【一次过】Lintcode 37. 反转一个3位整数

反转一个只有3位数的整数。样例123 反转之后是 321。900 反转之后是 9。注意事项你可以假设输入一定是一个只有三位数的整数,这个整数大于等于100,小于1000。解题思路:入门级别,非常简单,如下:class Solution {public: /** * @param number: A 3-digit number. * @r...

2018-08-10 10:15:24 190

原创 【两次过】Lintcode 129. 重哈希

哈希表容量的大小在一开始是不确定的。如果哈希表存储的元素太多(如超过容量的十分之一),我们应该将哈希表容量扩大一倍,并将所有的哈希值重新安排。假设你有如下一哈希表:size=3, capacity=4[null, 21, 14, null] ↓ ↓ 9 null ↓ null哈希函数为:int hashcode(...

2018-08-09 21:24:02 153

原创 【两次过】Lintcode 128. 哈希函数

在数据结构中,哈希函数是用来将一个字符串(或任何其他类型)转化为小于哈希表大小且大于等于零的整数。一个好的哈希函数可以尽可能少地产生冲突。一种广泛使用的哈希函数算法是使用数值33,假设任何字符串都是基于33的一个大整数,比如:hashcode("abcd") = (ascii(a) * 333+ascii(b) * 332+ascii(c) *33 +ascii(d)) %HASH...

2018-08-09 20:33:17 125

原创 【两次过】Lintcode 144. 交错正负数

给出一个含有正整数和负整数的数组,重新排列成一个正负数交错的数组。样例给出数组[-1, -2, -3, 4, 5, 6],重新排序之后,变成[-1, 5, -2, 4, -3, 6]或者其他任何满足要求的答案挑战原地完成,没有额外的空间注意事项不需要保持正整数或者负整数原来的顺序。解题思路1:先用partition操作将数组分为负数与正数两部分。注意,根据是正数...

2018-08-05 10:53:39 342

原创 【一次过】Lintcode 143. 排颜色 II

给定一个有n个对象(包括k种不同的颜色,并按照1到k进行编号)的数组,将对象进行分类使相同颜色的对象相邻,并按照1,2,...k的顺序进行排序。样例给出colors=[3, 2, 2, 1, 4],k=4, 你的代码应该在原地操作使得数组变成[1, 2, 2, 3, 4]挑战一个相当直接的解决方案是使用计数排序扫描2遍的算法。这样你会花费O(k)的额外空间。你否能在不使用额外空间的...

2018-08-02 21:56:28 253

空空如也

空空如也

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

TA关注的人

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