1、反转字符串数组:给定一个字符数组,反转。要求原地进行,空间复杂度为O(1)。
public void reverseString(char[] s) {
int n = s.length;
int l = 0;
int r = n - 1;
while (l < r)
swap(s, l++, r--);
}
private static void swap(char[] arr, int i, int j){
char t = arr[i];
arr[i] = arr[j];
arr[j] = t;
}
2、求盛水最多的容器-中等难度
给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/container-with-most-water
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
public int maxArea(int[] height) {
int len = height.length;
int l = 0;
int r = len - 1;
int h = height[l] < height[r]? height[l] : height[r];
int maxvolume = (r - l) * h;
while(l < r){
int volume = (r - l) * h;
if(maxvolume < volume)
maxvolume = volume;
if(h == height[l] )
l++;
else
r--;
h = height[l] < height[r]? height[l] : height[r];
}
return maxvolume;
}
3、验证回文字符串
public boolean isPalindrome(String s) {
int l = 0;
int r = s.length() - 1;
while(l < r){
while(!Character.isLetterOrDigit(s.charAt(l)) && l < r)
l++;
while(!Character.isLetterOrDigit(s.charAt(r)) && r > l)
r--;
if(l < r)
if(Character.toLowerCase(s.charAt(l)) != Character.toLowerCase(s.charAt(r)))
return false;
l++;
r--;
}
return true;
}
4、两数之和,有序数组
public int[] twoSum(int[] numbers, int target) {
int[] index = {-1, -1};
int i = 0;
int j = numbers.length - 1;
while (i < j){
if(numbers[i] + numbers[j] == target)
break;
if(numbers[i] + numbers[j] < target)
i++;
if(numbers[i] + numbers[j] > target)
j--;
}
index[0] = i + 1;
index[1] = j + 1;
return index;
}