jxh
JAVA实现leetcode11,14,15题
11.盛最多水的容器
题目描述
给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
说明:你不能倾斜容器。
示例 1:
输入:[1,8,6,2,5,4,8,3,7]
输出:49
解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水的最大值为 49。
示例 2:
输入:height = [1,1]
输出:1
示例 3:
输入:height = [4,3,2,1,4]
输出:16
示例 4:
输入:height = [1,2,1]
输出:2
提示:
n = height.length
2 <= n <= 3 * 104
0 <= height[i] <= 3 * 104
思路
本题利用双指针,在两头的指针逐个向中间移动,哪边指针数值小就移动哪边,并记录max值
代码
class Solution {
public int maxArea(int[] height) {
int max=0;
for(int i=0,j=height.length-1;i<j;){
int Height=height[i]<height[j]?height[i++]:height[j--];
max=Math.max(max,(j-i+1)*Height);
}
return max;
}
}
最长公共前缀
题目描述
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。
示例 1:
输入:strs = [“flower”,“flow”,“flight”]
输出:“fl”
示例 2:
输入:strs = [“dog”,“racecar”,“car”]
输出:""
解释:输入不存在公共前缀。
提示:
0 <= strs.length <= 200
0 <= strs[i].length <= 200
strs[i] 仅由小写英文字母组成
思路
让字符数组的第一个元素的各个值去跟后面不断比较,
复杂度O(n^2)
代码
class Solution {
public String longestCommonPrefix(String[] strs) {
if(strs==null || strs.length==0){
return "";
}
int l=strs.length;
int k=strs[0].length();
int s=0;
for(int i=0;i<k;i++){
int sum=0;
for(int j=0;j<l;j++){
if(strs[j].length()>i && strs[0].charAt(i)==strs[j].charAt(i)){
sum++;
}
else break;
}
if(sum==l){
s++;
}
else break;
}
return strs[0].substring(0,s);
}
}
15.三数之和
题目描述
给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。
注意:答案中不可以包含重复的三元组。
示例 1:
输入:nums = [-1,0,1,2,-1,-4]
输出:[[-1,-1,2],[-1,0,1]]
示例 2:
输入:nums = []
输出:[]
示例 3:
输入:nums = [0]
输出:[]
思路
不好意思我太笨了超时了,暴力美学O(n^3),先对数组排下序,再加个判断条件剔除相同的
代码
class Solution {
public List<List<Integer>> threeSum(int[] nums) {
List<List<Integer>> ans=new ArrayList<>();
if(nums.length<3){
return ans;
}
Arrays.sort(nums);
for(int i=0;i<nums.length-2;i++){
if(i>=1&&nums[i]==nums[i-1]){
continue;
}
for(int j=i+1;j<nums.length-1;j++){
if(j>=i+2&&nums[j]==nums[j-1]){
continue;
}
for(int k=j+1;k<nums.length;k++){
if(k>=j+2&&nums[k]==nums[k-1]){
continue;
}
if(nums[i]+nums[j]+nums[k]==0){
ans.add(Arrays.asList(nums[i],nums[j],nums[k]));
}
// ans.add(Arrays.asList(nums[i],nums[j],nums[k]));
}
}
}
return ans;
}
}