一連の考え
ダブル ポインター メソッドの使用:
左右に 2 つのポインタを定義し、左右からトラバースを開始し、一度も動かさずに 2 つのポインタの対応する位置の高さを比較します。高さが低い側に水を追加します。このとき、現在の高さと現在の部分の最大高さの差が受水量となりますのでご注意ください。次に、ポインターを中央に移動します。
この方法は非常に巧妙です。理解したい場合は、他の方法を使用するよりも簡単です。
コード
class Solution {
public int trap(int[] height) {
int left = 0;
int right = height.length-1;
int leftMax = 0;
int rightMax = 0;
int res = 0;
while(left<right){
if(height[left]<height[right]){
leftMax = leftMax>height[left]?leftMax:height[left];
res += leftMax - height[left];
left++;
}else{
rightMax = rightMax>height[right]?rightMax:height[right];
res += rightMax-height[right];
right--;
}
}
return res;
}
}
LeetCode 48. 画像の回転
一連の考え
最初に対称軸に沿って反転し、次に正中線を反転します。
コード
class Solution {
public void rotate(int[][] matrix) {
int temp = 0;
for(int i =0;i<matrix.length;i++){
for(int j = i+1;j<matrix[i].length;j++){
temp = matrix[i][j];
matrix[i][j] = matrix[j][i];
matrix[j][i] = temp;
}
}
for(int i = 0;i<matrix.length;i++){
for(int j = 0;j<matrix[i].length/2;j++){
temp = matrix[i][j];
matrix[i][j] = matrix[i][matrix.length-1-j];
matrix[i][matrix.length-1-j] = temp;
}
}
}
}