阅读 73

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

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


文章分类
后端
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐