【剑指offer】Java实现

面试题3 二维数组中的查找 Leetcode--74 Search a 2D Matrix

 1 /*Java
 2 Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the following properties:
 3
 4     Integers in each row are sorted from left to right.
 5     The first integer of each row is greater than the last integer of the previous row.
 6
 7 For example,
 8
 9 Consider the following matrix:
10
11 [
12   [1,   3,  5,  7],
13   [10, 11, 16, 20],
14   [23, 30, 34, 50]
15 ]
16
17 Given target = 3, return true.
18 本题最简单的方法循环遍历行与列 但是时间复杂度较高。
19 */
20 class Solution {
21     public boolean searchMatrix(int[][] matrix, int target) {
22         boolean find = false;
23         int rows,cols;
24         if (matrix == null || matrix.length==0) {
25             rows = 0;
26             cols = 0;
27         } else {
28             rows = matrix.length;
29             cols = matrix[0].length;
30         }
31
32         if (matrix != null && rows > 0 && cols > 0) {
33             int row = 0;
34             int col = cols-1;
35             while(row<rows && col>=0){
36                 if(matrix[row][col]==target){
37                     find=true;
38                     break;
39                 }
40
41                 else if(matrix[row][col]>target){
42                     col--;
43                 }else{
44                     row++;
45                 }
46             }
47         }
48
49         return find;
50     }
51 public static void main(String[] args) {
52         int[][] matrix1 = { { 1, 3, 5, 7 }, { 10, 11, 16, 20 }, { 23, 30, 34, 50 } };
53
54         int[][] matrix = {};
55         int target = 55;
56         SearchA2DMatrix cc = new SearchA2DMatrix();
57         boolean find = cc.searchMatrix(matrix, target);
58         System.out.println(find);
59     }
60 }

原文地址:https://www.cnblogs.com/yumiaomiao/p/8280622.html

时间: 2024-10-02 23:40:25

【剑指offer】Java实现的相关文章

剑指offer(Java版)第一题:在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。 *请找出数组中任意一个重复的数字。 *例如,如果输入长度为7的数组{2, 3, 1, 0, 2, 5, 3},那么对应的输出是重复的数字2或者3。

/*在一个长度为n的数组里的所有数字都在0到n-1的范围内. * 数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次. * 请找出数组中任意一个重复的数字. * 例如,如果输入长度为7的数组{2, 3, 1, 0, 2, 5, 3},那么对应的输出是重复的数字2或者3.*/ import java.util.*; public class Class1 { static class findRepeatedNumber{ public int findRepeatedN

剑指Offer(Java版)第四十题:在数组中的两个数字,如果前面一个数字大于后面的数字, 则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。 并将P对1000000007取模的结果输出。 即输出P%1000000007

/*在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数P.并将P对1000000007取模的结果输出. 即输出P%1000000007 */ import java.util.*; public class Class40 { public int InversePairs(int[] array){ int length = array.length; int P = 0; for(int i = 0; i < lengt

剑指Offer(Java版)第三十五题:给一个数组,返回它的最大连续子序列的和

/*HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学.今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决.但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止).给一个数组,返回它的最大连续子序列的和,你会不会被他忽悠住?(子向量的长度至少是1) */ import java.util.*; publ

剑指Offer(Java版)第四十五题:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。

/*一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. */ import java.util.*; public class Class45 { public void FindNumsAppearOnce(int[] array, int num1[], int num2[]){ ArrayList<Integer> list = new ArrayList<Integer>(); Arrays.sort(array); for(int

剑指Offer(Java版)第六十五题:给定一棵二叉搜索树,请找出其中的第k小的结点。 例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。

/*给定一棵二叉搜索树,请找出其中的第k小的结点.例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4.*//*二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值: 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值*///思路:从最左边的叶子节点开始找起. import java.util.*; public clas

剑指Offer(Java版)第六十七题:给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。 例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口, 他们的最大值分别为{4,4,6,6,6,5}。

/*给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值.例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}: 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,[4,2,6],2,5,1}, {2,3,4,[2,6,2],5,1}, {2,3,4,2,[6,2,5],1}, {2,3,4

剑指offer java -查找旋转数组的最小数字

/** * Created by wqc on 2017/7/18. * 查找旋转数组的最小数字 * 把一个数组最开始的若干个元素搬到数组的末尾,称为数组的旋转 * 输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素 * 如:3,4,5,1,2 为1,2,3,4,5的一个旋转,最小值为1 */public class Problem8_findMinNumber { public Integer findMinNum(int[] array) { if(array == null) { r

剑指Offer(Java版)第十二题:地上有一个m行n列的方格。一个机器人从坐标(0, 0)的格子开始移动, 它每一次可以向左、右、上、下移动一格,但不能进入行坐标和列坐标的数位之和大于k的格子。 如,当k为18时,机器人能够进入方格(35, 37),因为3+5+3+7=18。但它不能进入方格(35, 38), 因为3+5+3+8=19。请问该机器人能够到达多少个格子?

/*地上有一个m行n列的方格.一个机器人从坐标(0, 0)的格子开始移动, 它每一次可以向左.右.上.下移动一格,但不能进入行坐标和列坐标的数位之和大于k的格子. 如,当k为18时,机器人能够进入方格(35, 37),因为3+5+3+7=18.但它不能进入方格(35, 38), 因为3+5+3+8=19.请问该机器人能够到达多少个格子?*/public class Class12 { public int moveCount(int rows, int cols, int threshold){

剑指Offer(Java版)第十一题

public class Class112 { public boolean findPath(char[] matrix, int rows, int cols, char[] str){ boolean anchor[] = new boolean[matrix.length]; for(int i = 0; i < rows; i++){ for(int j = 0; j < cols; j++){ int count = 0; if(findPathMain(matrix, row,

剑指offer编程题Java实现——面试题7相关题用两个队列实现一个栈

剑指offer面试题7相关题目:用两个队列实现一个栈 解题思路:根据栈的先入后出和队列的先入先出的特点1.在push的时候,把元素向非空的队列内添加2.在pop的时候,把不为空的队列中的size()-1份元素poll出来,添加到另为一个为空的队列中,再把队列中最后的元素poll出来两个队列在栈不为空的情况下始终是有一个为空,另一个不为空的.push添加元素到非空的队列中,pop把非空队列的元素转移到另一个空的队列中,直到剩下最后一个元素,这个元素就是要出栈的元素(最后添加到队列中的元素). 1