矩阵元素查找&&缺失的第一个正整数&&缺失数字

320 阅读1分钟

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;
    }
}