LeeCode热题100打卡第四天
第一道题(LeeCode第283道):移动零
给定一个数组 nums
,编写一个函数将所有 0
移动到数组的末尾,同时保持非零元素的相对顺序。请注意 ,必须在不复制数组的情况下原地对数组进行操作。
class Solution {
public void moveZeroes(int[] nums) {
int j = 0;
for(int i : nums){
if(i != 0){
nums[j++] = i;
}
}
while(j < nums.length){
nums[j++] = 0;
}
}
}
第二道题(LeeCode第11道):盛最多水的容器
给定一个长度为 `n` 的整数数组 `height` 。有 `n` 条垂线,第 `i` 条线的两个端点是 `(i, 0)` 和 `(i, height[i])` 。找出其中的两条线,使得它们与 `x` 轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量。**说明:**你不能倾斜容器。
解法一:暴力求解法:
class Solution {
public int maxArea(int[] height) {
int max_val = 0;
for(int i = 0; i < height.length; i++){
for(int j = i ;j < height.length; j ++){
int val = (j - i) * ((height[i] < height[j]) ? height[i] : height[j]);
max_val = Math.max(val, max_val);
}
}
return max_val;
}
}
解法二:技巧解法:
class Solution {
public int maxArea(int[] height) {
int res = 0;
for(int i = 0, j = height.length - 1; i < j;){
res = Math.max(res, (Math.min(height[i], height[j]) * (j - i)));
if(height[i] > height[j])
j--;
else
i++;
}
return res;
}
}