Leetcode 题解 --二分查找--大于给定元素的最小元素
2019-05-20 11:04
901 查看
大于给定元素的最小元素
744. Find Smallest Letter Greater Than Target (Easy)
Input:
letters = ["c", "f", "j"]
target = "d"
Output: "f"
Input:
letters = ["c", "f", "j"]
target = "k"
Output: "c"
题目描述:给定一个有序的字符数组 letters 和一个字符 target,要求找出 letters 中大于 target 的最小字符,如果找不到就返回第 1 个字符。
解法:利用二分查找,找得到返回letters 中大于 target 的最小字符,找不到就返回第 1 个字符。不如先设定返回值为第一个字符,由于是二分查找,我们发现一个比target大的就给c赋值,因为h是不断变小的,c的值在循环的过程中肯定会变成大于 target 的最小字符
[code]class Solution { public char nextGreatestLetter(char[] letters, char target) { int n = letters.length; int l = 0, h = n-1; char c = letters[0]; while(l <= h){ int m = l + (h - l) / 2; if(letters[m] > target){ c = letters[m]; h = m - 1; } else l = m + 1; } return c; } }
另一种写法
[code]class Solution { public char nextGreatestLetter(char[] letters, char target) { int n = letters.length; int l = 0, h = n - 1; while (l <= h) { int m = l + (h - l) / 2; if (letters[m] <= target) { l = m + 1; 最后l停下的位置 } else { h = m - 1; } } return l < n ? letters[l] : letters[0]; } }
对while (l <= h) 还是 l < h做个人的总结:
做了这两道题目,有一点感触 l <= h 的时候,假设l = h 的时候 均等于m = 2 最后的返回 l = m + 1 h = m或者 h = m - 1, l = m为1
也就是返回的情况需要考虑到左右两边的情况
当 l < h的时候,就是 l = h = m = 2就可以返回了,此时 l 和 h 是相等的,也就是说我要得就是相等时候的index
比如上面那道题 显然是要返回 l = m + 1的那个index。
相关文章推荐
- Leetcode 题解 --二分查找--旋转数组的最小数字
- 程序员面试题目总结--数组(二)【二分查找、找出给定数字出现次数、两个有序整型数组交集、找出数组中唯一的重复元素、判断数组中的数值是否连续相邻】
- 算法导论第十二章关于搜索二叉树的建立,查询,查找最大最小元素值,查找给定结点的直接后继
- 二分查找 —— 有序数组不小于(不大于)某数的第一个(最后一个)元素
- Leetcode 题解 --二分查找--有序数组的 Single Element
- 给定一个集合A=[0,1,3,8](该集合中的元素都是在0,9之间的数字,但未必全部包含), 指定任意一个正整数K,请用A中的元素组成一个大于K的最小正整数。
- leetcode 209. Minimum Size Subarray Sum-子序列最小长度|双指针|二分查找
- Leetcode 题解 --二分查找--第一个错误的版本
- 谷歌笔试题--给定一个集合A=[0,1,3,8](该集合中的元素都是在0,9之间的数字,但未必全部包含), 指定任意一个正整数K,请用A中的元素组成一个大于K的最小正整数。
- Leetcode 题解 --二分查找--查找区间
- 每天一道LeetCode-----摩尔投票法寻找给定数组中出现个数大于n/2或n/3的元素
- 二分查找:在有序数组中搜索大于等于x的数的最小下标
- 对于一个有序数组,我们通常采用二分查找的方式来定位某一元素,请编写二分查找的算法,在数组中查找指定元素。 给定一个整数数组A及它的大小n,同时给定要查找的元素val,请返回它在数组中的位置(从0开始),若不存在该元素,返回-1。若该元素出现多次,请返回第一次出现的位置。
- 二分查找、二分查找小于等于key的最后一个元素、二分查找大于等于key的第一个元素
- 给定数组,查找最小的k个元素或最大的k个元素
- 【leetcode】搜索范围(二分查找升序数组target元素上下界)
- 算法实验一:二分查找算法改进: 当搜索元素x不存在时,返回小于x的最大元素位置i和大于x的最小元素位置j. 当搜索元素在数组中时,i和j相同,均为x在数组中的位置。
- 给定数组,查找最小的k个元素或最大的k个元素 快速排序算法灵活应用
- LeetCode 题解 169. Majority Element(查找多数元素)
- Leetcode540. 二分查找找出数组中只出现一次的元素