查找第一个值等于给定值的元素

  1. function searchFirstEqualElement(nums, target) {
  2. let len = nums.length
  3. let low = 0
  4. let high = len - 1
  5. while(low < high) {
  6. let mid = low + ((high - low) >> 1)
  7. if(nums[mid] > target) {
  8. high = mid - 1
  9. } else if(nums[mid] < target) {
  10. low = mid + 1
  11. } else {
  12. if(mid === 0 || nums[mid - 1] !== target) {
  13. return mid
  14. }
  15. high = mid - 1
  16. }
  17. }
  18. }

查找最后一个值等于给定值的元素

  1. function searchLastEuqalElement(nums, target) {
  2. let len = nums.length
  3. let low = 0
  4. let high = len - 1
  5. while(low < high) {
  6. let mid = low + ((high - low) >> 1)
  7. if(nums[mid] > target) {
  8. high = mid - 1
  9. } else if (nums[mid] < target) {
  10. low = mid + 1
  11. } else {
  12. if(mid === len - 1 || nums[mid + 1] !== target) {
  13. return mid
  14. }
  15. low = mid + 1
  16. }
  17. }
  18. }

查找第一个大于等于给定值的元素

  1. function searchFirstGreaterElement(nums, target) {
  2. let len = nums.length
  3. let low = 0
  4. let high = len - 1
  5. while(low <= high) {
  6. let mid = low + ((high - low) >> 1)
  7. if(nums[mid] >= target) {
  8. if(mid === 0 && nums[mid - 1] < target) {
  9. return mid
  10. }
  11. high = mid - 1
  12. } else {
  13. low = mid + 1
  14. }
  15. }
  16. }

查找最后一个小于等于给定值的元素

  1. function searchLastLessElement(nums, target) {
  2. let len = nums.length
  3. let low = 0
  4. let high = len - 1
  5. while(low <= high) {
  6. let mid = low + ((high - low) >> 1)
  7. if(nums[mid] <= target) {
  8. if(mid === len - 1 || nums[mid + 1] > target) {
  9. return mid
  10. }
  11. low = mid + 1
  12. } else {
  13. high = mid - 1
  14. }
  15. }
  16. }