2022-3-1 剑指offer day19

题1:

JZ53 数字在升序数组中出现的次数

描述

给定一个长度为 n 的非降序数组和一个非负数整数 k ,要求统计 k 在数组中出现的次数
 
数据范围:0 \le n \le 1000 , 0 \le k \le 1000n1000,0k100,数组中每个元素的值满足 0 \le val \le 1000val100
要求:空间复杂度 O(1)O(1),时间复杂度 O(logn)O(logn)
 1 public class Solution {
 2     public int GetNumberOfK(int [] array , int k) {
 3         int ans=0;
 4        for (int s:array){
 5            if (s==k) ans++;
 6            if (s>k) break;
 7        }
 8         return ans;
 9     }
10 }

思路:遍历数组,超过k直接退出。

 

题2:

JZ4 二维数组中的查找

描述

在一个二维数组array中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
[
[1,2,8,9],
[2,4,9,12],
[4,7,10,13],
[6,8,11,15]
]

给定 target = 7,返回 true。

给定 target = 3,返回 false。
 
数据范围:矩阵的长宽满足 0 \le n,m \le 5000n,m500 , 矩阵中的值满足 0 \le val \le 10^90val109
进阶:空间复杂度 O(1)O(1) ,时间复杂度 O(n+m)O(n+m)
 1 public class Solution {
 2     public boolean Find(int target, int [][] array) {
 3         int m=array.length,n=array[0].length;
 4         int i=m-1,j=0;
 5         while (i>=0&&i<m&&j>=0&&j<n){
 6             if (target==array[i][j]) return true;
 7             if (target>array[i][j]) {
 8                 j++;
 9             }else {
10                 i--;
11             }
12         }
13         return false;
14     }
15 }

思路:根据二维数组的结构,从左下角或者右上角开始找,右边更大,上边更小。

 

posted on 2022-03-01 09:05  阿ming  阅读(20)  评论(0编辑  收藏  举报

导航