NC86 矩阵元素查找
1、解题思路
从左下开始找,如果大于当前元素,往右走;如果小于当前元素,往上走。
2、代码
import java.util.*;
public class Solution {
public int[] findElement(int[][] mat, int n, int m, int x) {
// write code here
int r = n - 1;
int c = 0;
while (r >= 0 && c < m) {
if (mat[r][c] == x) {
return new int[]{r, c};
} else if (mat[r][c] < x) {
c++;
} else {
r--;
}
}
return new int[]{0, 0};
}
}
NC30 缺失的第一个正整数
1、解题思路
# 1. 处理数组中的负数
- 从数组中遍历,将数组中负数变为 数组的长度+1
# 2. 把出现的数 对应的下标的值变负
- 注意在处理的时候 有可能出现负下标,所以在这里 绝对值处理
# 3. 遍历数组
- 遍历数组,一旦出现正数,对应的下标+1 就是第一个缺少的正整数
2、代码
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums int整型一维数组
* @return int整型
*/
public int minNumberDisappeared (int[] nums) {
// write code here
int n = nums.length;
int ans = n + 1;
for (int i = 0; i < n; i++) {
if (nums[i] <= 0) {
nums[i] = n + 1;
}
}
for (int i = 0; i < n; i++) {
int index = Math.abs(nums[i]);
if (index <= n) {
nums[index - 1] = -1 * Math.abs(nums[index - 1]);
}
}
for (int i = 0; i < n; i++) {
if (nums[i] > 0) {
ans = i + 1;
break;
}
}
return ans;
}
}
NC101 缺失数字
1、解题思路
使用二分,如果当前元素和下标不相等,需要判断 当前元素和前面一个元素是否连续,如果不连续 找到结果;如果连续,左移。如果相等,右移。
2、代码
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 找缺失数字
* @param a int整型一维数组 给定的数字串
* @return int整型
*/
public int solve (int[] a) {
// write code here
// write code here
int l = 0;
int r = a.length - 1;
int ans = r + 1;
while (l <= r) {
int mid = l + (r - l) / 2;
if (a[mid] == mid) {
l = mid + 1;
} else {
if (mid != 0) {
if (a[mid] == a[mid - 1] + 1) {
r = mid - 1;
} else {
return mid;
}
} else {
return 0;
}
}
}
return ans;
}
}