11. 盛最多水的容器
题目链接:11. 盛最多水的容器 - 力扣(LeetCode)
题目难度:中等
代码:
class Solution {
public int maxArea(int[] height) {
int i=0,j=height.length-1,res=0;
while(i<j){
res=height[i]<height[j]?
Math.max(res,(j-i)*height[i++]):
Math.max(res,(j-i)*height[j--]);
}
return res;
}
}
16. 最接近的三数之和
题目链接:16. 最接近的三数之和 - 力扣(LeetCode)
题目难度:中等
代码:
class Solution {
public int threeSumClosest(int[] nums, int target) {
Arrays.sort(nums);
int res=nums[0]+nums[1]+nums[2];
int n=nums.length;
for(int k=0;k<n-2;k++){
if (k > 0 && nums[k] == nums[k - 1]) continue;
if (nums[k] + nums[k+1] + nums[k+2]- target > Math.abs(target - res)) return res;
if (nums[k] + nums[n-2] + nums[n-1] < target) {
res = nums[k] + nums[n-2] + nums[n-1];
continue;
}
int i=k+1,j=n-1;
while(i<j){
int sum=nums[i]+nums[k]+nums[j];
if(Math.abs(target-res)>Math.abs(target-sum))
res=sum;
if(sum-target<0) i++;
else if(sum-target>0) j--;
else
return sum;
}
}
return res;
}
}
33. 搜索旋转排序数组
题目链接:33. 搜索旋转排序数组 - 力扣(LeetCode)
题目难度:中等
代码:
class Solution {
public int search(int[] nums, int target) {
int left=0,right=nums.length-1;
while(left<=right){
int mid=(left+right)/2;
if(nums[mid]==target)
return mid;
if(nums[left]<=nums[mid]){
if(target>=nums[left]&&target<nums[mid])
right=mid-1;
else
left=mid+1;
}else{
if(target<=nums[right]&&target>nums[mid])
left=mid+1;
else
right=mid-1;
}
}
return -1;
}
}
36. 有效的数独
题目难度:中等
代码:
class Solution {
public boolean isValidSudoku(char[][] board) {
int[][] rows=new int[9][9];
int[][] cols=new int[9][9];
int[][][] subboxes=new int[3][3][9];
for(int i=0;i<9;i++){
for(int j=0;j<9;j++){
char c=board[i][j];
if(c!='.'){
int index=c-'0'-1;
rows[i][index]++;
cols[j][index]++;
subboxes[i/3][j/3][index]++;
if(rows[i][index]>1||cols[j][index]>1||subboxes[i/3][j/3][index]>1)
return false;
}
}
}
return true;
}
}