LC剑指 Offer 11. 旋转数组的最小数字
//因为存在重复数字那么相当于变种二分搜索,如果相等的情况下该如何处理,将右侧边界转为前一个
class Solution {
public int minArray(int[] numbers) {
int left = 0,right = numbers.length - 1;
while(left < right){
int mid = left + (right - left) / 2;
if(numbers[mid] < numbers[right]){
right = mid;
}else if(numbers[mid] > numbers[right]){
left = mid + 1;
}else{
right -= 1;
}
}
return numbers[left];
}
}
LC剑指 Offer 48. 最长不含重复字符的子字符串
//滑动窗口和我所想的差不多,也就是利用一个集合来保存字符,如果集合当中包含字符的话就要不断收缩左侧边界,然后移除窗口中的元素即可,直到不包含该字符为止。
class Solution {
public int lengthOfLongestSubstring(String s) {
int left = 0,right = 0,count = 0;
int maxlength = 0;
HashSet<Character> set = new HashSet();
while(right < s.length()){
char ch = s.charAt(right);
if(!set.contains(ch)){
set.add(ch);
right++;
maxlength = Math.max(maxlength,right - left);
}else{
while(set.contains(ch)){
set.remove(s.charAt(left++));
}
}
}
return maxlength;
}
}
LC557. 反转字符串中的单词 III
//善用Stringbuffer和相关String的API方法
class Solution {
public String reverseWords(String s) {
s = s.trim();
StringBuffer buffer = new StringBuffer();
String[] strarr = s.split(" ");
StringBuffer res = new StringBuffer();
for(int i = 0;i < strarr.length;i++){
res.append(buffer.append(strarr[i]).reverse());
if(i == strarr.length - 1){
break;
}
res.append(" ");
buffer.delete(0,buffer.length());
}
return res.toString();
}
}