牛客NC86 矩阵元素查找【中等 分治,减治 C++/Java/Go/PHP】

题目

题目链接:

https://www.nowcoder.com/practice/3afe6fabdb2c46ed98f06cfd9a20f2ce

思路

复制代码
选择左下角为起点,以下展示了「减治」的过程。
搜索的规律是:

如果当前数比目标元素小,当前列就不可能存在目标值,「指针」就向右移一格(纵坐标加 1);
如果当前数比目标元素大,当前行就不可能存在目标值,「指针」就向上移一格(横坐标减 1)。
在编码的过程中要注意数组下标越界的问题。

参考答案C++

cpp 复制代码
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param mat int整型vector<vector<>> 
     * @param n int整型 
     * @param m int整型 
     * @param x int整型 
     * @return int整型vector
     */
    vector<int> findElement(vector<vector<int> >& mat, int n, int m, int x) {
        /*
           选择左下角为起点,以下展示了「减治」的过程。
           搜索的规律是:

           如果当前数比目标元素小,当前列就不可能存在目标值,「指针」就向右移一格(纵坐标加 1);
           如果当前数比目标元素大,当前行就不可能存在目标值,「指针」就向上移一格(横坐标减 1)。
           在编码的过程中要注意数组下标越界的问题。
            */
        // 起点:左下角
        int currow = n-1;
        int curcol = 0;

        // 不越界的条件是:行大于等于 0,列小于等于 cols - 1
        vector<int> ans = {-1,-1};
        while (currow >=0 && curcol<m){
            if(mat[currow][curcol] >x ){
                currow-=1;
            }else if(mat[currow][curcol] <x){
                curcol+=1;
            }else{
                ans[0] =currow;
                ans[1] =curcol;
                break;
            }
        }
        return ans;
    }
};

参考答案Java

java 复制代码
import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param mat int整型二维数组
     * @param n int整型
     * @param m int整型
     * @param x int整型
     * @return int整型一维数组
     */
    public int[] findElement (int[][] mat, int n, int m, int x) {
        /*
             选择左下角为起点,以下展示了「减治」的过程。
             搜索的规律是:

             如果当前数比目标元素小,当前列就不可能存在目标值,「指针」就向右移一格(纵坐标加 1);
             如果当前数比目标元素大,当前行就不可能存在目标值,「指针」就向上移一格(横坐标减 1)。
             在编码的过程中要注意数组下标越界的问题。
              */
        // 起点:左下角
        int currow = n - 1;
        int curcol = 0;

        // 不越界的条件是:行大于等于 0,列小于等于 cols - 1
        while (currow >= 0 && curcol < m) {
            if (mat[currow][curcol] > x) {
                currow -= 1;
            } else if (mat[currow][curcol] < x) {
                curcol += 1;
            } else {
                return new int[] {currow, curcol};
            }
        }

        return new int[] {-1, -1};
    }
}

参考答案Go

go 复制代码
package main

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 *
 * @param mat int整型二维数组
 * @param n int整型
 * @param m int整型
 * @param x int整型
 * @return int整型一维数组
 */
func findElement(mat [][]int, n int, m int, x int) []int {
	/*
	   选择左下角为起点,以下展示了「减治」的过程。
	   搜索的规律是:

	   如果当前数比目标元素小,当前列就不可能存在目标值,「指针」就向右移一格(纵坐标加 1);
	   如果当前数比目标元素大,当前行就不可能存在目标值,「指针」就向上移一格(横坐标减 1)。
	   在编码的过程中要注意数组下标越界的问题。
	*/
	// 起点:左下角
	currow := n - 1
	curcol := 0

	ans := []int{-1, -1}
	// 不越界的条件是:行大于等于 0,列小于等于 cols - 1
	for currow >= 0 && curcol < m {
		if mat[currow][curcol] > x {
			currow -= 1
		} else if mat[currow][curcol] < x {
			curcol += 1
		} else {
			ans[0] = currow
			ans[1] = curcol
			break
		}
	}
	return ans
}

参考答案PHP

php 复制代码
<?php


/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param mat int整型二维数组 
 * @param n int整型 
 * @param m int整型 
 * @param x int整型 
 * @return int整型一维数组
 */
function findElement( $mat ,  $n ,  $m ,  $x )
{
     /*
    选择左下角为起点,以下展示了「减治」的过程。
    搜索的规律是:

    如果当前数比目标元素小,当前列就不可能存在目标值,「指针」就向右移一格(纵坐标加 1);
    如果当前数比目标元素大,当前行就不可能存在目标值,「指针」就向上移一格(横坐标减 1)。
    在编码的过程中要注意数组下标越界的问题。
 */
    // 起点:左下角
    $currow = $n-1;
    $curcol = 0;

    $ans = [-1,-1];
    while ($currow >=0 && $curcol < $m){
        if($mat[$currow][$curcol] > $x) {
            $currow-=1;
        }else if($mat[$currow][$curcol] < $x){
            $curcol+=1;
        }else{
            $ans[0] =$currow;
            $ans[1] =$curcol;
            break;
        }
    }
    return $ans;
}
相关推荐
炽烈小老头1 小时前
【每天学习一点算法 2025/12/19】二叉树的层序遍历
数据结构·学习·算法
Xの哲學1 小时前
Linux grep命令:文本搜索的艺术与科学
linux·服务器·算法·架构·边缘计算
soft20015251 小时前
MySQL Buffer Pool深度解析:LRU算法的完美与缺陷
数据库·mysql·算法
WBluuue2 小时前
AtCoder Beginner Contest 436(ABCDEF)
c++·算法
fie88892 小时前
广义 S 变换(GST)地震信号时频谱
算法
json{shen:"jing"}3 小时前
1-C语言的数据类型
c语言·c++·算法
im_AMBER3 小时前
数据结构 13 图 | 哈希表 | 树
数据结构·笔记·学习·算法·散列表
LYFlied3 小时前
【算法解题模板】动态规划:从暴力递归到优雅状态转移的进阶之路
数据结构·算法·leetcode·面试·动态规划
Hcoco_me4 小时前
RTMPose_JSON相关解读
算法·数据挖掘·json·聚类
高洁014 小时前
DNN案例一步步构建深层神经网络(二)
人工智能·python·深度学习·算法·机器学习