LeetCode 热题 100---04~07
第一题:移动零
思路
找到每一个为0的元素 然后移到数组的最后 但是需要注意的是 要在给定的数组原地进行修改 并且其他非零元素的相对顺序不能改变 我们采用双指针法
定义两个指针i和j i和j一开始分别都在0索引位置 然后判断j所在位置元素数值 如果等于0 则往下走一位 反之 则将数值赋值到i位置 j和i同时向下走一位
这样子 i总在j后面 j所到的非零元素 都会按照相对顺序依次赋值到i的位置 当j走到重点 i必然还没走到重点(除非整个数组没有0元素) 此时j会停止 而其他非零元素已经全部到达i的前方位置
接下来只需要遍历一遍i~j 将这部分的元素置零即可 大致过程如下(最后将两箭头之间的元素置零即可)
第二题:盛最多水的容器
解法一 暴力法(超时)
最简单直接的方法就是双重for嵌套 依次遍历 两两求体积 最后取最大值即可
思路是可行的 但是在数据量大的情况下 时间超时也是没办法的
class Solution {
public int maxArea(int[] height) {
if(height.length==1 || height.length==0) return 0;
int max=0;
for (int i = 0; i < height.length; i++) {
for(int j=i+1;j<height.length;j++){
int v=(j-i)*Math.min(height[i],height[j]);
if(v>max) max=v;
}
}
return max;
}
}