LeetCode34. 在排序数组中查找元素的第一个和最后一个位置(Java)
2019-03-20 13:12
435 查看
题目:
给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。
你的算法时间复杂度必须是 O(log n) 级别。
如果数组中不存在目标值,返回 [-1, -1]。
示例:
代码:
- 解法一
class Solution { public int[] searchRange(int[] nums, int target) { int i = 0, int j = nums.length; int mid = (i + j) / 2; int p = -1; while (i < j) { if (nums[mid] == target) { p = mid; break; } if (nums[mid] > target) { if (j == mid) break; j = mid; mid = (i + j) / 2; } else { if (i == mid) break; i = mid; mid = (i + j) / 2; } } if (p == -1) { return new int[]{-1, -1}; } else { int a = p, b = p; while (a > 0 && nums[a - 1] == target) { a--; } while (b < nums.length - 1 && nums[b + 1] == target){ b++; } return new int[]{a, b}; } } }
- 别人的代码
class Solution { public int[] searchRange(int[] nums, int target) { int[] res = new int[2]; int l = 0; int r = nums.length-1; int mid = (l + r)/2; boolean flag = false; while(l <= r){ mid = (l + r)/2; if(nums[mid] > target){ r = mid - 1; }else if(nums[mid] < target){ l = mid + 1; }else if(nums[mid] == target){ flag = true; break; } } if(flag == false){ res[0] = -1; res[1] = -1; }else{ int i = mid-1; int j = mid+1; while(i>=0 && nums[i] == target){ //while循环条件里的i>=0与nums[i] == target的顺序, 顺序不同导致两个条件判断先后顺序不同,谁在前就先判断哪个条件;如果调换则会造成数组下标越界 i--; } res[0] = i+1; while(j<nums.length && nums[j] == target){ j++; } res[1] = j-1; } return res; } }
相关文章推荐
- leetcode 34. 在排序数组中查找元素的第一个和最后一个位置
- Leetcode34. 在排序数组中查找元素的第一个和最后一个位置
- Leetcode 34. 在排序数组中查找元素的第一个和最后一个位置
- leetcode34.在排序数组中查找元素的第一个和最后一个位置
- Leetcode做题日记:34. 在排序数组中查找元素的第一个和最后一个位置(PYTHON)
- leetcode34---在排序数组中查找元素的第一个和最后一个位置
- 34. 在排序数组中查找元素的第一个和最后一个位置
- java__给定一个非负整数数组,假定你的初始位置为数组第一个下标。 数组中的每个元素代表你在那个位置能够跳跃的最大长度。 请确认你是否能够跳跃到数组的最后一个下标。
- 34. Search for a Range(二分查找有重复元素数组中的目标数的第一个位置和最后一个位置)
- 【java】输入数组、数组排序及查找数组位置
- 定义一个int型数组,包含10个元素,分别赋值为1~10, 然后将数组中的元素都向前移一个位置,最后一个元素的值是原来第一个元素的值,然后输出这个数组
- Java中数组Arrays.binarySearch,快速查找数组内元素位置
- 【程序35】 ArrayChange.java 题目:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。
- 二分查找 —— 有序数组不小于(不大于)某数的第一个(最后一个)元素
- java数组中根据元素查找位置 索引
- 154.leetcode Find Minimum in Rotated Sorted Array II(hard)[排序数组 重复元素 二分查找]
- Java开发练习1,输入一个一维数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。
- Java学习之数组1(1.数组的声明;2.元素为引用数据类型的数组;3.关于main方法里的String[] args;4.数组排序;5.数3退1 数组算法,(用数组模拟链表);6数组查找之二分法;7数组的拷贝)
- 在排序的数组中二分查找一个元素,返回在数组中它第一次出现的位置
- 如何在一维数组中查找某重复元素,并输出其位置?用java实现