牛客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;
}
相关推荐
203号居民1 小时前
LeetCode hot 100 —41. 缺失的第一个正数
数据结构·算法·leetcode
专注仿真3 小时前
问答大模型技术方案算法实现-熵权法融合算法 + 交叉编码器重排算法
人工智能·python·算法·语言模型·问答大模型关键算法·熵权融合算法·交叉编码器重排算法
地平线开发者4 小时前
量化为什么会有损失:从量化误差到精度下降
算法
手写码匠5 小时前
华为云Flexus+DeepSeek征文|Dify 多 Agent 会话管理与上下文工程实战:让智能体“记住该记住的,忘掉该忘掉的“
人工智能·深度学习·算法·aigc
2401_862880825 小时前
数据结构 --- 栈
c语言·数据结构·算法
致Great5 小时前
Qwen3.8-27B 接入 DSH 全流程实测:写代码、跑长任务,都没问题
算法
Tisfy6 小时前
LeetCode 3471.找出最大的几近缺失整数:三种情况判断
算法·leetcode·题解·分类讨论
linux-hzh6 小时前
百日算法修炼 · Day 12
算法·深度优先
额额额对了6 小时前
数据结构:二叉树
c语言·数据结构·算法
iNeuOS工业互联网7 小时前
iNeuOS_Vision_视觉分析,增加SAM3模型对实例分割和目标检测AI自动标注图片样本功能
人工智能·算法·目标检测