华为OD机试 - 符合要求的元组的个数(Java & JS & Python)

2023-11-17

题目描述

给定一个整数数组 nums、一个数字k,一个整数目标值 target,请问nums中是否存在k个元素使得其相加结果为target,请输出所有符合条件且不重复的k元组的个数

数据范围

  • 2 ≤ nums.length ≤ 200
  • -10^9 ≤ nums[i] ≤ 10^9
  • -10^9 ≤ target ≤ 10^9
  • 2 ≤ k ≤ 100
     

输入描述

第一行是nums取值:2 7 11 15

第二行是k的取值:2

第三行是target取值:9

输出描述

输出第一行是符合要求的元组个数:1

补充说明:[2,7]满足,输出个数是1

用例

输入 -1 0 1 2 -1 -4
3
0
输出 2
说明 [-1,0,1],[-1,-1,2]满足条件
输入 2 7 11 15
2
9
输出 1
说明 [2,7]符合条件

 题目解析

本题其实需要参考:

LeetCode - 15 三数之和

LeetCode - 18 四数之和

这两题。如果你对这两题不熟悉,请做本题前,先做完前面这两题,这两题是基础。否则下面代码会看不懂。

其中三数之和,是需要固定三元组中的最小的一个值,然后通过双指针找到剩余两个数。

其中四数之和,是需要固定四元组中的最小的两个值,然后通过双指针找到剩余两个数。

而K数之和,其实需要固定K元组中最小的K-2个值,然后通过双指针找到剩余两个数。

因此,下面代码实现中分为了两部分:

K-2重for循环完成 K元组中最小的K-2个值的确定
通过双指针完成剩余两个值的确定
而实际上K的值是不确定的,因此第1部分的K-2重for循环需要通过递归完成。
 

Java代码

import java.util.Scanner;
 
public class Main {
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
 
    int m = sc.nextInt();
    int n = sc.nextInt();
 
    int[][] matrix = new int[m][n];
    for (int i = 0; i < m; i++) {
      for (int j = 0; j < n; j++) {
        matrix[i][j] = sc.nextInt();
      }
    }
 
    System.out.println(getResult(m, n, matrix));
  }
 
  public static int getResult(int m, int n, int[][] matrix) {
    int count = 0;
    int[][] offsets = {{-1, 0}, {1, 0}, {0, 1}, {0, -1}};
 
    for (int x = 0; x < m; x++) {
      for (int y = 0; y < n; y++) {
        if (matrix[x][y] == 1) {
          count++;
          continue;
        }
 
        for (int[] offset : offsets) {
          int newX = x + offset[0];
          int newY = y + offset[1];
 
          if (newX >= 0 && newX < m && newY >= 0 && newY < n && matrix[newX][newY] == 1) {
            count++;
            break;
          }
        }
      }
    }
 
    return count;
  }
}

JS代码

/* JavaScript Node ACM模式 控制台输入获取 */
const rl = require("readline").createInterface({
  input: process.stdin,
});
 
const lines = [];
let m, n;
rl.on("line", (line) => {
  lines.push(line);
 
  if (lines.length === 1) {
    [m, n] = lines[0].split(" ").map(Number);
  }
 
  if (m && lines.length == m + 1) {
    lines.shift();
    const matrix = lines.map((line) => line.split(" ").map(Number));
    console.log(getResult(matrix, m, n));
    lines.length = 0;
  }
});
 
function getResult(matrix, m, n) {
  let count = 0;
 
  const offsets = [
    [-1, 0],
    [1, 0],
    [0, -1],
    [0, 1],
  ];
 
  for (let x = 0; x < m; x++) {
    for (let y = 0; y < n; y++) {
      if (matrix[x][y] === 1) {
        count++;
        continue;
      }
 
      for (let [offsetX, offsetY] of offsets) {
        const newX = x + offsetX;
        const newY = y + offsetY;
 
        if (
          newX >= 0 &&
          newX < m &&
          newY >= 0 &&
          newY < n &&
          matrix[newX][newY] === 1
        ) {
          count++;
          break;
        }
      }
    }
  }
 
  return count;
}

Python代码

# 输入获取
m, n = map(int, input().split())
matrix = [list(map(int, input().split())) for _ in range(m)]
 
 
# 算法入口
def getResult():
    count = 0
 
    offsets = ((-1, 0), (1, 0), (0, -1), (0, 1))
 
    for x in range(m):
        for y in range(n):
            if matrix[x][y] == 1:
                count += 1
                continue
 
            for offsetX, offsetY in offsets:
                newX = x + offsetX
                newY = y + offsetY
 
                if m > newX >= 0 and n > newY >= 0 and matrix[newX][newY] == 1:
                    count += 1
                    break
 
    return count
 
 
# 算法调用
print(getResult())
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

华为OD机试 - 符合要求的元组的个数(Java & JS & Python) 的相关文章

  • 表单发布请求并存储收到的数据

    我有一个非常简单的表单 在提交时发出发布请求
  • ExpectedFailure 被计为错误而不是通过

    我在用着expectedFailure因为有一个我想记录的错误 我现在无法修复 但想将来再回来解决 我的理解expectedFailure是它会将测试计为通过 但在摘要中表示预期失败的数量为 x 类似于它如何处理跳过的 tets 但是 当我
  • Python:尝试检查有效的电话号码

    我正在尝试编写一个接受以下格式的电话号码的程序XXX XXX XXXX并将条目中的任何字母翻译为其相应的数字 现在我有了这个 如果启动不正确 它将允许您重新输入正确的数字 然后它会翻译输入的原始数字 我该如何解决 def main phon
  • 聆听 Angular 2 中的元素可见性

    我正在为我的网络应用程序使用 Bootstrap 和 Angular 2 v4 我想监听指令中的元素以了解可见性变化 我的元素有一个可以隐藏其子元素的父元素hidden sm up我需要在每次隐藏或显示时触发一个函数 div hidden
  • Python - 按月对日期进行分组

    这是一个简单的问题 起初我认为很简单而忽略了它 一个小时过去了 我不太确定 所以 我有一个Python列表datetime对象 我想用图表来表示它们 x 值是年份和月份 y 值是此列表中本月发生的日期对象的数量 也许一个例子可以更好地证明这
  • 用于选择特定 div 中具有特定类的锚元素的 jQuery 选择器是什么

    我有一些这样的代码 我想选择每个 a 带有类的标签status在 div 中foo div a class status a div 你可以这样做 foo find status a
  • Python 3 中“map”类型的对象没有 len()

    我在使用 Python 3 时遇到问题 我得到了 Python 2 7 代码 目前我正在尝试更新它 我收到错误 类型错误 map 类型的对象没有 len 在这部分 str len seed candidates 在我像这样初始化它之前 se
  • java.lang.NumberFormatException: Invalid int: "3546504756",这个错误是什么意思?

    我正在创建一个 Android 应用程序 并且正在从文本文件中读取一些坐标 我在用着Integer parseInt xCoordinateStringFromFile 将 X 坐标转换为整数 Y 坐标的转换方法相同 当我运行该应用程序时
  • 如何将 PIL 图像转换为 NumPy 数组?

    如何转换 PILImage来回转换为 NumPy 数组 这样我就可以比 PIL 进行更快的像素级转换PixelAccess允许 我可以通过以下方式将其转换为 NumPy 数组 pic Image open foo jpg pix numpy
  • 游戏内的java.awt.Robot?

    我正在尝试使用下面的代码来模拟击键 当我打开记事本时 它工作正常 但当我打开我想使用它的游戏时 它没有执行任何操作 所以按键似乎不起作用 我尝试模拟鼠标移动和点击 这些动作确实有效 有谁知道如何解决这个问题 我发现这个问题 如何在游戏中使用
  • Python:计算字典的重复值

    我有一本字典如下 dictA unit1 test1 alpha unit1 test2 beta unit2 test1 alpha unit2 test2 gamma unit3 test1 delta unit3 test2 gamm
  • 将 Azure AD 高级自定义角色与 Spring Security 结合使用以进行基于角色的访问

    我创建了一个演示 Spring Boot 应用程序 我想在其中使用 AD 身份验证和授权 并使用 AD 和 Spring Security 查看 Azure 文档 我执行了以下操作 package com myapp contactdb c
  • 检查所有值是否作为字典中的键存在

    我有一个值列表和一本字典 我想确保列表中的每个值都作为字典中的键存在 目前我正在使用两组来确定字典中是否存在任何值 unmapped set foo set bar keys 有没有更Pythonic的方法来测试这个 感觉有点像黑客 您的方
  • 使用 next.js 进行服务器端渲染与传统 SSR

    我非常习惯 SSR 意味着页面得到完全刷新并从服务器接收完整 HTML 的方法 其中根据后端堆栈使用 razor pub other 进行渲染 因此 每次用户单击导航链接时 它只会向服务器发送请求 整个页面将刷新 接收新的 HTML 这就是
  • 从 Python 中的类元信息对 __init__ 函数进行类型提示

    我想做的是复制什么SQLAlchemy确实 以其DeclarativeMeta班级 有了这段代码 from sqlalchemy import Column Integer String from sqlalchemy ext declar
  • Flot 库将 y 轴设置为最小值 0 和最大值 24

    如何将 y 轴设置在 0 到 24 的范围内 这是我的代码 j plot j placeholder d1 xaxis mode time min new Date 2010 11 01 getTime max new Date 2011
  • Spark.read 在 Databricks 中给出 KrbException

    我正在尝试从 databricks 笔记本连接到 SQL 数据库 以下是我的代码 jdbcDF spark read format com microsoft sqlserver jdbc spark option url jdbc sql
  • 如何从 Maven 存储库引用本机 DLL?

    如果 JAR 附带 Maven 存储库中的本机 DLL 我需要在 pom xml 中放入什么才能将该 DLL 放入打包中 更具体地举个例子Jacob http search maven org artifactdetails 7Cnet s
  • Pandas 与 Numpy 数据帧

    看这几行代码 df2 df copy df2 1 df 1 df 1 values 1 df2 ix 0 0 我们的教练说我们需要使用 values属性来访问底层的 numpy 数组 否则我们的代码将无法工作 我知道 pandas Data
  • 如何在 JFreeChart 中设置多个系列的线条粗细?

    我创建了很多图表 在他们每个人中我都需要打电话 renderer setSeriesStroke i new BasicStroke 2 0f 对于每个系列 renderer is chart getXYPlot getRenderer 我

随机推荐

  • 从操作系统层面理解同步、异步、阻塞、非阻塞

    同步和异步描述调用者会不会主动等待函数的返回值 举个例子 public void method int result otherMethod 像上面这种形式就叫同步 result 会一直等待 otherMethod 方法执行完毕并拿到返回值
  • BMVC2022

    原文标题 Hierarchical Residual Learning Based Vector Quantized Variational Autoencoder for Image Reconstruction and Generati
  • 运行 Triton 示例

    安装 Triton Docker 镜像 在拉取镜像前 需要安装 Docker 和 NVIDIA Container Toolkit 用以下命令拉取镜像 docker pull nvcr io nvidia tritonserver
  • VTK编译方法

    VTK编译方法 VTK Group Imaging ON VTK Group MPI ON VTK Group QT ON VTK Group TK ON VTK Group Views ON VTK RENDERING BACKEND O
  • 使用layui/layuiAdmin的总结

    layui是一个前端UI框架 主要是配合JQuery使用 开始使用 首先是下载文件 然后引入css和js文件 引入之后就需要在
  • 以太坊开发入门,完整入门

    翻译自 https medium com mattcondon getting up to speed on ethereum 63ed28821bbe 从入门到精通 干货篇 必读 如果你 是一个专业的程序员 如果你想了解以太坊当前可以做到
  • QT QTabWidget 、布局控件 动态添加窗口(控件)、删除窗口(控件)方案

    new 一个窗口或者控件 QTabWidget addTab 将新建的控件放到一个容器中 比如 QMap
  • mybatis查询

    以后返回统一用对象 resultMap 查询 基本查询 select from person where person id id 条件查询 分页 select from cobra apply store yjs user id yjsU
  • 递归的一种应用

    有些问题 涉及两个对象 比如两个数 像个长度不同的数组 链表之类的 必须考虑是前者大还是后者大的情况 分别处理 其实可以只处理一种情况 比如前者小 后者大的情况 另一种情况 前者大后者小 可以通过交换参数 递归调用本函数来处理
  • ArrayList与顺序表

    文章目录 一 顺序表是什么 二 ArrayList是什么 三 ArrayList的构造方法 四 ArrayList的常见方法 4 1 add 4 2 size 4 3 remove 4 4 get 4 5 set 4 6 contains
  • kali linux中如何安装中文输入法

    前言 在使用kali linux中 我们可能用到中文输入法 那么我们该如何安装中文输入法呢 正文 一 首先 我们需要检查更新源是否可用 如果可用我们就进行第二步 如果不可用 我们则需要手动添加更新源 手动添加更新源 我们需要到网上找到最新的
  • 云原生安全性:构建可信任的云应用的最佳实践

    文章目录 云原生安全性的重要性 1 数据隐私 2 恶意攻击 3 合规性要求 4 业务连续性 构建可信任的云应用的最佳实践 1 安全开发 2 身份验证与授权 3 容器安全性 4 监控与审计 5 持续集成与持续交付 CI CD 6 安全培训和教
  • 制作树莓派img镜像文件

    想做个树莓派的img镜像 然而对SD卡进行全盘复制很浪费空间 且不能恢复到比现有SD卡容量小的卡上 因此探索制作小img的方法 网上看了大神制作的脚本 比如https github com conanwhf RaspberryPi scri
  • MySQL索引原理详解

    目录 一 数据结构 1 1 二叉树 为什么索引的数据结构不用二叉树 1 2 红黑树 自平衡二叉查找树 为什么索引的数据结构不用红黑树 1 3 B树 多路平衡搜索树 为什么索引的数据结构不用B树 1 4 B 树 1 5 MySQL B 树 1
  • QML的Label实现Tooltip提示效果

    在用QML进行界面设计时 往往需要用到Label 但是由于界面宽度的限制 Label会显示不全 需要进行Tooltip进行提示 而QML中的Label本身还不支持Tooltip的提示功能 所以给开发带来了一定的困难 那么 遇到这种问题 该怎
  • SpringBoot中使用ThreadPoolExecutor和ThreadPoolTaskExecutor线程池的方法和区别

    Java中经常用到多线程来处理业务 在多线程的使用中 非常的不建议使用单纯的Thread或者实现Runnable接口的方式来创建线程 因为这样的线程创建及销毁势必会造成耗费资源 线程上下文切换问题 同时创建过多的线程也可能会引发资源耗尽的风
  • 【计算机操作系统】第二章 进程管理

    1 进程的基本概念 1 1 程序的顺序执行和特征 程序顺序执行时的特征 顺序性 处理机的操作严格按照程序所规定的顺序执行 即每一操作必须在上一个操作结束之后开始 封闭性 程序是在封闭的环境下执行的 即程序运行时独占全机资源 资源的状态 除初
  • 大数据课程C5——ZooKeeper的应用组件

    文章作者邮箱 yugongshiye sina cn 地址 广东惠州 本章节目的 掌握Zookeeper的Canal消费组件 掌握Zookeeper的Dubbo分布式服务框架 掌握Zookeeper的Metamorphosis消息中间件 掌
  • 快速性分析 一阶、二阶系统响应

    自控笔记 3 3一阶系统的时间响应及动态性能 一 一阶系统的数学模型 凡是以一阶微分方程作为运动方程的控制系统 称为一阶系统 其数学模型为 时间常数T是表征系统响应的唯一参数 T越小 输出响应上升得越快 调节时间越小 二 一阶系统的典型响应
  • 华为OD机试 - 符合要求的元组的个数(Java & JS & Python)

    题目描述 给定一个整数数组 nums 一个数字k 一个整数目标值 target 请问nums中是否存在k个元素使得其相加结果为target 请输出所有符合条件且不重复的k元组的个数 数据范围 2 nums length 200 10 9 n