排序查找
文章平均质量分 57
剑指Offer-LeetCode排序查找类面试高频题
Java大数据运动猿
努力提升自己,记录学习过程。巩固自己,帮助他人!
展开
-
215. 数组中的第K个最大元素【382】
此题基于快速排序进行改编,来求解目标元素。快速排序的原理是找一个基准值,然后把小于基准值的所有元素放在左边,大于基准值的所有元素放在右边,然后再用递归的方式分别对左右两边的元素进行快速排序。在此题中,因为找的是第k个最大的元素,所以目标值的索引位置为array.length-k,所以每排一次序之后,判断基准值的索引位置是否小于目标值的索引位置,小于的话则对右边的元素进行排序,否则对左边的元素进行排序,依次类推,当基准值的索引位置等于目标值的索引位置时,将其位置对应的值返回即可。这样的原创 2023-03-14 13:46:56 · 213 阅读 · 0 评论 -
69. x 的平方根【101】
因为计算只涉及到整数,不涉及小数部分,所以可以利用二分查找的方法找出目标值。求x的平方根,那么这个值的取值范围一定在0-x之间,我们可以用mid中间值的平方来判断是否小于x,小于的话那就继续循环增加mid的值,大于的话就缩小mid的值,直到找到目标值位置。原创 2023-01-08 17:22:14 · 466 阅读 · 0 评论 -
剑指 Offer 40. 最小的k个数【31】
在排序过程中,我们可以去不断的缩小排序的区间,这里我们借助快速排序的代码,稍微的改动几行就完成了这道题目。1、以当前区间的第一个元素为基准元素pivot,根据快速排序的操作,将当前区间划分为了三个区间。1、左侧区间均是小于等于基准元素pivot的元素2、中间区间均是等于基准元素pivot的元素3、右侧区间均是大于等于基准元素pivot的元素原创 2022-10-27 10:51:40 · 861 阅读 · 0 评论 -
剑指 Offer 57. 和为s的两个数字【2】
条件:递增排序数组,找出两个数字相加和为给定的值s因为是递增排序的数组,所以我们可以用双指针来解题,left指针和right指针left指向数组最左元素,right指向数组最右元素。用左指针元素和右指针元素相加的结果来判断指针移动。while(left < right){如果两个元素相加等于目标值,则直接返回如果两个元素相加大于目标值,则右指针向左移动。如果两个元素相加小于目标值,则左指针向右移动}原创 2022-10-27 11:18:24 · 501 阅读 · 0 评论 -
剑指 Offer 57 - II. 和为s的连续正数序列【9】
思路,双指针(left左指针 right右指针)刚开始 left 在位置 1, right 在位置 2, 定义左右指针之间的数字和为:sum = n*(a1+an)/2 递增数列的求和公式1.类似二分查找的逻辑,当 sum 等于 target 时,将左右指针之间的这种数组加入结果,然后左指针右移2.当 sum 小于 target 时,右指针右移增大 sum3.当 sum 大于 target 时,说明以 left 为起点组成的数组不符要求,左指针右移原创 2022-10-27 11:54:27 · 115 阅读 · 0 评论