mvc做门户网站,市场调研报告怎么写范文,wordpress 新建文件,建网站推广淘宝店二分查找
今日刷到二分查找#xff0c;以前做过的题忘的一干二净#xff1b;庆幸自己用新的方法做了出来两道“中等”题#xff1b;#xff08;我都能做出来我认为应该标“简单”#xff09;由于之前题的难度基本在抄答案#xff0c;所以停更几天。今天没抄答案就更新一…二分查找
今日刷到二分查找以前做过的题忘的一干二净庆幸自己用新的方法做了出来两道“中等”题我都能做出来我认为应该标“简单”由于之前题的难度基本在抄答案所以停更几天。今天没抄答案就更新一下。
34. 在排序数组中查找元素的第一个和最后一个位置 给你一个按照非递减顺序排列的整数数组 nums和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。 如果数组中不存在目标值 target返回 [-1, -1]。 你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。 示例 1 输入nums [5,7,7,8,8,10], target 8
输出[3,4] 算法思路
“ 间复杂度为 O(log n) 按照非递减顺序排列的整数数组 nums”两个提示说明要用到二分查找才能满足题目要求直接写出二分查找基本函数biSearch(int[] nums, int target)并在主函数调用若在nums中找到target则返回target的索引mid否则返回-1若返回-1就表示没找到则返回[-1,-1]由于是非递数组若有多个target值应该是连续存在故从mid向两侧开始寻找返回[indexl,indexr]即可1-1是因为while跳出循环前多/-一次
class Solution {public int[] searchRange(int[] nums, int target) {int left0,rightnums.length-1;int tempbiSearch(nums,target);if(temp0){int indexrtemp, indexltemp;while(indexrrightnums[indexr]nums[temp]){indexr;}while(indexl0nums[indexl]nums[temp]){indexl--;}return new int[]{indexl1,indexr-1};}return new int[]{-1,-1};}public int biSearch(int[] nums, int target) {int left0,rightnums.length-1;while(leftright){int mid(right-left)/2left;if(nums[mid]target){return mid;}if(nums[mid]target){rightmid-1;}else{leftmid1;}}return -1;}
}
结果 74.搜索二维矩阵 给你一个满足下述两条属性的 m x n 整数矩阵 每行中的整数从左到右按非递减顺序排列。每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target 如果 target 在矩阵中返回 true 否则返回 false 。 示例 1 输入matrix [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target 3
输出true 算法思路
“非递减”直接使用效率最高的二分查找每行循环一次进行一次二分查找找到为止
class Solution {public boolean searchMatrix(int[][] matrix, int target) {for(int[] num:matrix){if(biSearch(num,target)true){return true;}}return false;}public boolean biSearch(int[] nums, int target){int left0, rightnums.length-1;while(leftright){int mid(right-left)/2left;if(nums[mid]target){return true;}if(nums[mid]target){rightmid-1;}else{leftmid1;}}return false;}
} 结果