深圳市做網(wǎng)站有哪些公司建站推廣網(wǎng)站
題目鏈接
稀疏數(shù)組搜索
題目描述
注意點(diǎn)
- 字符串?dāng)?shù)組中散布著一些空字符串
- words的長度在[1, 1000000]之間
- 字符串?dāng)?shù)組是排好序的
- 數(shù)組中的字符串不重復(fù)
解答思路
- 因?yàn)閿?shù)組中的字符串是排好序的,所以首先想到的是二分查找,先將數(shù)組中長度與s相同的字符串統(tǒng)計(jì)出來,然后二分比較字符串word與s(如果word小于s則向右二分,如果word大于s則向左二分)
代碼
class Solution {public int findString(String[] words, String s) {List<Integer> list = new ArrayList<>();for (int i = 0; i < words.length; i++) {if (words[i].length() == s.length()) {list.add(i);}}int left = 0;int right = list.size() - 1;while (left <= right) {int mid = left + ((right - left) >> 1);int idx = list.get(mid);int res = words[idx].compareTo(s);if (res == 0) {return idx;}if (res < 0) {left = mid + 1;} else {right = mid - 1;}}return -1;}
}
關(guān)鍵點(diǎn)
- 二分查找的思想