我有一个算法将NXN矩阵旋转90度.它有效,但我很难理解.任何人都可以向我详细解释一下吗?谢谢.
public static void rotate(int[][] matrix, int n) {
for (int layer = 0; layer < n / 2; ++layer) {
int first = layer;
int last = n - 1 - layer;
for(int i = first; i < last; ++i) {
int offset = i - first;
int top = matrix[first][i]; // save top
// left -> top
matrix[first][i] = matrix[last-offset][first];
// bottom -> left
matrix[last-offset][first] = matrix[last][last - offset];
// right -> bottom
matrix[last][last - offset] = matrix[i][last]; …Run Code Online (Sandbox Code Playgroud) 我刚刚进行了在线编码访谈,其中一个问题是针对给定的整数数组,找出总和等于某个数字的对的数量(作为方法内的参数传递).例如,一个数组给出,
int[] a = {3, 2, 1, 45, 27, 6, 78, 9, 0};
int k = 9; // given number
Run Code Online (Sandbox Code Playgroud)
因此,将有2对(3,6)和(9,0),其总和等于9.值得一提的是,如何形成对并不重要.装置(3,6)和(6,3)将被视为同一对.我提供了以下解决方案(用Java)并且很想知道我是否错过了任何边缘情况?
public static int numberOfPairs(int[] a, int k ){
int len = a.length;
if (len == 0){
return -1;
}
Arrays.sort(a);
int count = 0, left = 0, right = len -1;
while( left < right ){
if ( a[left] + a[right] == k ){
count++;
if (a[left] == a[left+1] && left < len-1 ){
left++;
}
if ( a[right] …Run Code Online (Sandbox Code Playgroud)