array
我要上岸!!!
这个作者很懒,什么都没留下…
展开
-
LintCode 486 Merge k Sorted Arrays
思路 要求时间复杂度O(N logk) 使用priorityqueue组成最小堆。堆的大小为k,首先将所有数组的第一个元素放进去,需要记录下是哪一个数组的第几个元素。然后每次从pq中拿出最小的元素加入答案序列,然后根据拿出来的那个元素的row和col,将与其同数组的下一个元素加入pq,保证pq的大小始终是k。 【实现:可以新建一个class去存储每一个元素所在的row,col和val,然后对于pq...原创 2019-03-14 08:31:21 · 251 阅读 · 0 评论 -
LeetCode 349 Intersection of Two Arrays
思路 首先遍历一遍nums1数组,利用一个hashset将其存起来,假设这个set的名字是hash。然后再遍历一遍nums2数组,将hash中存在的元素加入一个新的set叫result。最后将这个result逐个元素都存到结果数组ans中。 复杂度 时间复杂度O(n) 空间复杂度O(n) 代码 class Solution { public boolean search(int[] num...原创 2019-03-15 08:23:59 · 128 阅读 · 0 评论 -
LeetCode 33 Search in Rotated Sorted Array
思路 以mid为分界线,左右两边必有一侧为递增的。 根据begin,mid,end的大小规律,每次搜寻的时候避开乱序部分。 附上YouTube讲解https://www.youtube.com/watch?v=KSZfO65J6hg 复杂度 时间复杂度O(log n),空间复杂度O(1) 代码 参考九章的二分模板 class Solution { public int search(int...原创 2019-03-15 08:28:32 · 64 阅读 · 0 评论 -
LeetCode 153 Find Minimum in Rotated Sorted Array
思路 本质就是二分搜索的思路,只是目标变了一下。这里只需要将目标变成找第一个比前一个元素小的元素即可。套用的也是九章的二分搜索模版。 【有一个特殊情况是数组没有发生旋转:这个时候其实也不需要特殊处理,只要将判断条件设置为mid > end即可,而不是mid > start】 复杂度 时间复杂度O(logn), 空间复杂度O(1) 代码 class Solution { publ...原创 2019-03-15 09:47:42 · 79 阅读 · 0 评论 -
LeetCode 540 Single Element in a Sorted Array
思路 由于时间复杂度上有要求,所以比较容易想到二分查找。但是此题的二分前进方向不是很明显。如下面的例子: 1 2 2 3 3 1 1 2 2 3 可以看出,落单者在mid后面是奇数位=偶数位,落单着在mid前面是偶数位=奇数位。由此可以得出二分的走向。 复杂度 时间复杂度O(logn), 空间复杂度O(1) 代码 class Solution { public int singleNonD...原创 2019-03-15 11:27:17 · 174 阅读 · 0 评论 -
LeetCode 27 Remove Elements
思路 同向双指针。如果没遇到给定的val,就让nums[index]=nums[i],其中index为指示当前可覆盖位置的指针(慢指针),i为遍历整个数组所用的指针(快指针)。如果遇到了,就只移动i指针,直到遇到的不是val。 复杂度 时间复杂度O(n), 空间复杂度O(1) 代码 class Solution { public int removeElement(int[] nums, ...原创 2019-03-15 14:00:38 · 97 阅读 · 0 评论 -
LintCode 526 Load Balancer
思路 要求三个方法都是O(1)的时间复杂度 使用一个HashMap存储server_id(key)和对应的index(value),可以使得put和remove的时间都为常数级 使用一个ArrayList存储所有的server_id,方便通过索引随机pick一台服务器 remove方法:在arraylist中删除元素,如果仅仅使用其自带的remove方法,时间复杂度为O(n), 因为相当于在数组中...原创 2019-03-17 13:20:24 · 395 阅读 · 0 评论 -
LeetCode 128 Longest Consecutive Sequence
思路 首先可以想到一个O(nlogn)时间的算法:排序。 对于O(n)的时间,使用set保存数组中的数,对于每一个元素都进行左右找下一个元素是否在数组中,然后标记是否被访问过(这里将该数从set中删除作为该标记),直到左右的下一个元素都不在数组中,这时可以记录下right-left-1作为一个候选长度【right-left-1是因为right和left最终都会停在下一个不存在的元素上】。然后重复上...原创 2019-04-04 12:51:08 · 99 阅读 · 0 评论