当前位置: 首页 > news >正文

【力扣】3128. 直角三角形 JAVA

一、题目描述

给你一个二维 boolean 矩阵 grid 。
请你返回使用 grid 中的 3 个元素可以构建的 直角三角形 数目,且满足 3 个元素值 都 为 1 。
注意:
如果 grid 中 3 个元素满足:一个元素与另一个元素在 同一行,同时与第三个元素在 同一列 ,那么这 3 个元素称为一个 直角三角形 。这 3 个元素互相之间不需要相邻。

  • 示例 1:
    0 1 0
    0 1 1
    0 1 0
    输入:grid = [[0,1,0],[0,1,1],[0,1,0]]
    输出:2
    解释:
    有 2 个直角三角形。

  • 示例 2:
    1 0 0 0
    0 1 0 1
    1 0 0 0
    输入:grid = [[1,0,0,0],[0,1,0,1],[1,0,0,0]]
    输出:0
    解释:
    没有直角三角形。

  • 示例 3:
    1 0 1
    1 0 0
    1 0 0
    输入:grid = [[1,0,1],[1,0,0],[1,0,0]]
    输出:2
    解释:
    有两个直角三角形。

二、解题思路

/***  解题思路:*  1、因为要找直角三角形,也就是说我们要找直角的顶点,也就是数组的交点为1*  2、先判断交点为1,然后找到交点为1所在的行的1的个数,然后再找到交点为1所在的列的1的个数*  3、解决第2步的问题,我们可以将二维数组的行和列抽取出来成为两个一维数组*  4、最后将每一行1的个数减去1 乘以 每一列1个数减1 最终得到结果(这个减去的1就是交点位置的1)*/

三、示例代码

public static long numberOfRightTriangles(int[][] grid) {//结果long sum = 0;//行数int m = grid.length;//列数int n = grid[0].length;//一维数组行int[] row = new int[m];//一维数组列int[] col = new int[n];for (int i = 0; i < m; i ++) {for (int j = 0; j < n; j ++) {//每行的j个数字相加,和为几,就代表每行有几个1row[i] += grid[i][j];//每列的i个数字相加,和为几,就代表每列有几个1col[j] += grid[i][j];}}for (int i = 0; i < m; i ++) {for (int j = 0; j < n; j ++) {//判断交点为1if (grid[i][j] == 1) {//将每一行1的个数减去1 乘以 每一列1个数减1 最终得到结果sum += (row[i] - 1) * (col[j] - 1);}}}return sum;}public static void main(String[] args) {int[][] grid = {{0,1,0},{0,1,1},{0,1,0}};System.out.println(numberOfRightTriangles(grid));}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • matlab y=sin(x) - 2/π*(x)函数绘制
  • 1.1、centos stream 9安装Kubernetes v1.30集群 环境说明
  • CSS mask-image 实现边缘淡出过渡效果
  • Flink-CDC解析(第47天)
  • 【机器学习】机器学习与医疗健康在疾病预测中的融合应用与性能优化新探索
  • CANopen和CAN是什么关系
  • Resilience4j 数据库熔断-健康检查sql
  • C# Web控件与数据感应之 TreeView 类
  • 【数据结构算法经典题目刨析(c语言)】随机链表的复制(图文详解)
  • 【人工智能】Transformers之Pipeline(三):文本转音频(text-to-audio/text-to-speech)
  • 仓颉语言 -- 宏
  • vue项目中,前端如何配置跨域请求
  • C语言 -- 动态内存管理
  • Node.js(2)——压缩前端html
  • 为什么Transformer需要进行 Multi-head Attention?
  • python3.6+scrapy+mysql 爬虫实战
  • [rust! #004] [译] Rust 的内置 Traits, 使用场景, 方式, 和原因
  • C# 免费离线人脸识别 2.0 Demo
  • CSS相对定位
  • JavaScript中的对象个人分享
  • mysql 5.6 原生Online DDL解析
  • oschina
  • redis学习笔记(三):列表、集合、有序集合
  • 不上全站https的网站你们就等着被恶心死吧
  • 服务器之间,相同帐号,实现免密钥登录
  • 机器学习学习笔记一
  • 罗辑思维在全链路压测方面的实践和工作笔记
  • 排序(1):冒泡排序
  • 巧用 TypeScript (一)
  • 区块链共识机制优缺点对比都是什么
  • 什么是Javascript函数节流?
  • 说说动画卡顿的解决方案
  • 网络应用优化——时延与带宽
  • 项目实战-Api的解决方案
  • 用Canvas画一棵二叉树
  • “十年磨一剑”--有赞的HBase平台实践和应用之路 ...
  • 【运维趟坑回忆录】vpc迁移 - 吃螃蟹之路
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • ​Distil-Whisper:比Whisper快6倍,体积小50%的语音识别模型
  • ​人工智能书单(数学基础篇)
  • #{}和${}的区别?
  • #{}和${}的区别是什么 -- java面试
  • #大学#套接字
  • ()、[]、{}、(())、[[]]命令替换
  • (c语言)strcpy函数用法
  • (二)原生js案例之数码时钟计时
  • (附源码)ssm高校实验室 毕业设计 800008
  • (已解决)vue+element-ui实现个人中心,仿照原神
  • (源码分析)springsecurity认证授权
  • ***微信公众号支付+微信H5支付+微信扫码支付+小程序支付+APP微信支付解决方案总结...
  • ./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’: ./incl
  • .NET 3.0 Framework已经被添加到WindowUpdate
  • .Net 垃圾回收机制原理(二)
  • .NET 中使用 TaskCompletionSource 作为线程同步互斥或异步操作的事件
  • .NET+WPF 桌面快速启动工具 GeekDesk