矩阵元素查找&&缺失的第一个正整数&&缺失数字
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; } }
作者:jdq8576
链接:https://juejin.cn/post/7022832658480644110