数组
文章平均质量分 87
月亮不打烊..
Java后端,分享日常的学习以及踩过的坑
展开
-
寻找和为定值的两个数
如果数组是无序的,先排序(N log N),然后用两个指针i,j,各自指向数组的首尾两端,令i=0,j=n-1,然后i++,j—,逐次判断a[i]+a[j]?2.进一步优化,使用二分查找,看sum-a[i]是否在该数组中,时间复杂度为n*O(logn),(如果有序,直接二分O(N log N),如果无序,先排序后二分,复杂度同样为O(N log N + N log N)= O(N log N),空间复杂度总为O(1))。输入一个数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。原创 2023-04-09 17:36:36 · 132 阅读 · 0 评论 -
寻找最小的k个数
求第k小的数,该算法类主要逻辑在于类似于快排取出临界值p ,partition(int[] arr, int begin, int end),该方法返回临界值p,若k<p,那么最小的k个数一定在p的左边begin...p-1,若k>p,那么最小的k个数一定在p的右边p+..end.若相等,返回第k小的元素,arr[p-1];刚开始有序数组放入第一个元素也是有序的因此i从1开始,j指向i-1,该位置是有序数组的末尾位置,要跟有序数组里面所有元素比较插入到适当位置,因此j--,j+1指向新加入的元素。原创 2023-04-09 17:20:48 · 457 阅读 · 0 评论