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

Leetcode 第 137 场双周赛

Powered by:NEFU AB-IN

Link

文章目录

  • Q1. 长度为 K 的子数组的能量值 I
    • 题意
    • 思路
    • 代码
  • Q2. 长度为 K 的子数组的能量值 II
    • 题意
    • 思路
    • 代码
  • Q3. 放三个车的价值之和最大 I
  • Q4. 放三个车的价值之和最大 II
    • 题意
    • 思路
    • 代码

Q1. 长度为 K 的子数组的能量值 I

题意

给你一个长度为 n 的整数数组 nums 和一个正整数 k 。

一个数组的 能量值 定义为:

如果 所有 元素都是依次 连续 且 上升 的,那么能量值为 最大 的元素。
否则为 -1 。
你需要求出 nums 中所有长度为 k 的子数组的能量值。

请你返回一个长度为 n - k + 1 的整数数组 results ,其中 results[i] 是子数组 nums[i…(i + k - 1)] 的能量值。

思路

这个数据范围小,可以直接暴力

代码

# 3.8.19 import
import random
from collections import Counter, defaultdict, deque
from datetime import datetime, timedelta
from functools import lru_cache, reduce
from heapq import heapify, heappop, heappush, nlargest, nsmallest
from itertools import combinations, compress, permutations, starmap, tee
from math import ceil, comb, fabs, floor, gcd, hypot, log, perm, sqrt
from string import ascii_lowercase, ascii_uppercase
from sys import exit, setrecursionlimit, stdin
from typing import Any, Callable, Dict, List, Optional, Tuple, TypeVar, Union# Constants
TYPE = TypeVar('TYPE')
N = int(2e5 + 10)
M = int(20)
INF = int(1e12)
OFFSET = int(100)
MOD = int(1e9 + 7)# Set recursion limit
setrecursionlimit(int(2e9))class Arr:array = staticmethod(lambda x=0, size=N: [x() if callable(x) else x for _ in range(size)])array2d = staticmethod(lambda x=0, rows=N, cols=M: [Arr.array(x, cols) for _ in range(rows)])graph = staticmethod(lambda size=N: [[] for _ in range(size)])class Math:max = staticmethod(lambda a, b: a if a > b else b)min = staticmethod(lambda a, b: a if a < b else b)class IO:input = staticmethod(lambda: stdin.readline().strip())read = staticmethod(lambda: map(int, IO.input().split()))read_list = staticmethod(lambda: list(IO.read()))read_mixed = staticmethod(lambda *types: [t(v) for t, v in zip(types, IO.input().split())])class Std:pass# ————————————————————— Division line ——————————————————————class Solution:def resultsArray(self, nums: List[int], k: int) -> List[int]:n = len(nums)res = []for i in range(n - k + 1):flag = Truemax_ = nums[i]for j in range(i + 1, i + k):if nums[j] != nums[j - 1] + 1:flag = Falsebreakmax_ = Math.max(max_, nums[j])if flag:res.append(max_)else:res.append(-1)return res

Q2. 长度为 K 的子数组的能量值 II

题意

给你一个长度为 n 的整数数组 nums 和一个正整数 k 。

一个数组的 能量值 定义为:

如果 所有 元素都是依次 连续 且 上升 的,那么能量值为 最大 的元素。
否则为 -1 。
你需要求出 nums 中所有长度为 k 的子数组的能量值。

请你返回一个长度为 n - k + 1 的整数数组 results ,其中 results[i] 是子数组 nums[i…(i + k - 1)] 的能量值。

思路

求前缀和即可,然后通过等差数列求和判断是否相等,而且d = 1

代码

# 3.8.19 import
import random
from collections import Counter, defaultdict, deque
from datetime import datetime, timedelta
from functools import lru_cache, reduce
from heapq import heapify, heappop, heappush, nlargest, nsmallest
from itertools import combinations, compress, permutations, starmap, tee
from math import ceil, comb, fabs, floor, gcd, hypot, log, perm, sqrt
from string import ascii_lowercase, ascii_uppercase
from sys import exit, setrecursionlimit, stdin
from typing import Any, Callable, Dict, List, Optional, Tuple, TypeVar, Union# Constants
TYPE = TypeVar('TYPE')
N = int(2e5 + 10)
M = int(20)
INF = int(1e12)
OFFSET = int(100)
MOD = int(1e9 + 7)# Set recursion limit
setrecursionlimit(int(2e9))class Arr:array = staticmethod(lambda x=0, size=N: [x() if callable(x) else x for _ in range(size)])array2d = staticmethod(lambda x=0, rows=N, cols=M: [Arr.array(x, cols) for _ in range(rows)])graph = staticmethod(lambda size=N: [[] for _ in range(size)])class Math:max = staticmethod(lambda a, b: a if a > b else b)min = staticmethod(lambda a, b: a if a < b else b)class IO:input = staticmethod(lambda: stdin.readline().strip())read = staticmethod(lambda: map(int, IO.input().split()))read_list = staticmethod(lambda: list(IO.read()))read_mixed = staticmethod(lambda *types: [t(v) for t, v in zip(types, IO.input().split())])class Std:class PrefixSum:def __init__(self, nums: List[int]):"""Initializes the PrefixSum object with the given list of numbers.Args:nums (List[int]): The input array of integers (0-based index)."""self._n = len(nums)self._prefix_sum_ = Arr.array(0, self._n + 1)  # 1-based index# Compute the prefix sum with adjusted indexingfor i in range(1, self._n + 1):# Adjust nums index by subtracting 1 to map 1-based prefix_sum to 0-based numsself._prefix_sum_[i] = self._prefix_sum_[i - 1] + nums[i - 1]def query(self, left: int, right: int) -> int:"""Returns the sum of elements in the range [left, right]. The input coordinates is 0-based indexing."""# Convert the 0-based indices to 1-based by adding 1return self._prefix_sum_[right + 1] - self._prefix_sum_[left]# ————————————————————— Division line ——————————————————————class Solution:def resultsArray(self, nums: List[int], k: int) -> List[int]:n = len(nums)res = []pre = Std.PrefixSum(nums)for i in range(n - k + 1):flag = pre.query(i, i + k - 1) == (k * (nums[i] + nums[i + k - 1]) // 2) and nums[i + k - 1] - nums[i] == k - 1if flag:res.append(nums[i + k - 1])else:res.append(-1)return res

Q3. 放三个车的价值之和最大 I

Q4. 放三个车的价值之和最大 II

题意

给你一个 m x n 的二维整数数组 board ,它表示一个国际象棋棋盘,其中 board[i][j] 表示格子 (i, j) 的 价值 。

处于 同一行 或者 同一列 车会互相 攻击 。你需要在棋盘上放三个车,确保它们两两之间都 无法互相攻击 。

请你返回满足上述条件下,三个车所在格子 值 之和 最大 为多少。

思路

类似贪心,可以推出来,每一列和每一行,最多取三个最大的值,取出来全放进set中去重,然后进行三个棋子的挨个枚举即可
偏暴力,应该不是最优解法,复杂度最大为排序的复杂度,n最大为1e7左右

代码

'''
Author: NEFU AB-IN
Date: 2024-08-17 22:12:44
FilePath: \LeetCode\CP137_2\c\c.py
LastEditTime: 2024-08-17 23:11:38
'''
# 3.8.19 import
import random
from collections import Counter, defaultdict, deque
from datetime import datetime, timedelta
from functools import lru_cache, reduce
from heapq import heapify, heappop, heappush, nlargest, nsmallest
from itertools import combinations, compress, permutations, starmap, tee
from math import ceil, comb, fabs, floor, gcd, hypot, log, perm, sqrt
from string import ascii_lowercase, ascii_uppercase
from sys import exit, setrecursionlimit, stdin
from typing import Any, Callable, Dict, List, Optional, Tuple, TypeVar, Union# Constants
TYPE = TypeVar('TYPE')
N = int(2e5 + 10)
M = int(20)
INF = int(1e12)
OFFSET = int(100)
MOD = int(1e9 + 7)# Set recursion limit
setrecursionlimit(int(2e9))class Arr:array = staticmethod(lambda x=0, size=N: [x() if callable(x) else x for _ in range(size)])array2d = staticmethod(lambda x=0, rows=N, cols=M: [Arr.array(x, cols) for _ in range(rows)])graph = staticmethod(lambda size=N: [[] for _ in range(size)])class Math:max = staticmethod(lambda a, b: a if a > b else b)min = staticmethod(lambda a, b: a if a < b else b)class IO:input = staticmethod(lambda: stdin.readline().strip())read = staticmethod(lambda: map(int, IO.input().split()))read_list = staticmethod(lambda: list(IO.read()))read_mixed = staticmethod(lambda *types: [t(v) for t, v in zip(types, IO.input().split())])class Std:pass# ————————————————————— Division line ——————————————————————class Solution:def maximumValueSum(self, board: List[List[int]]) -> int:m, n = len(board), len(board[0])row_dict = defaultdict(list)col_dict = defaultdict(list)for i in range(m):for j in range(n):value = board[i][j]if len(row_dict[i]) < 3:row_dict[i].append((value, i, j))row_dict[i].sort(reverse=True, key=lambda x: x[0])elif value > row_dict[i][-1][0]:row_dict[i][-1] = (value, i, j)row_dict[i].sort(reverse=True, key=lambda x: x[0])if len(col_dict[j]) < 3:col_dict[j].append((value, i, j))col_dict[j].sort(reverse=True, key=lambda x: x[0])elif value > col_dict[j][-1][0]:col_dict[j][-1] = (value, i, j)col_dict[j].sort(reverse=True, key=lambda x: x[0])row_max_set = set()for i in range(m):row_max_set.update(row_dict[i])for j in range(n):row_max_set.update(col_dict[j])row_max = list(row_max_set)row_max.sort(reverse=True, key=lambda x: x[0])res = -INFfor i in range(len(row_max)):v1, r1, c1 = row_max[i]for j in range(i + 1, len(row_max)):v2, r2, c2 = row_max[j]if c1 == c2 or r1 == r2:continuefor k in range(j + 1, len(row_max)):v3, r3, c3 = row_max[k]if r2 != r3 and r1 != r3 and c2 != c3 and c1 != c3:res = Math.max(res, v1 + v2 + v3)breakreturn res

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Python酷库之旅-第三方库Pandas(088)
  • 单词搜索
  • 鸿蒙(API 12 Beta3版)【元数据(C/C++)】媒体相机开发指导
  • 获取操作系统的信息(Go语言)
  • 第10章 使用Entity Framework Core 保存数据
  • servlet基础操作(get)
  • HarmonyOS应用三之组件生命周期和参数传递
  • Apollo9.0 PNC源码学习之Planning模块—— Lattice规划(四):纵向运动轨迹规划
  • python:画由抛物线: y^2=2x 与直线 y=x-4 所围成的图形
  • DHU OJ 二维数组
  • Spring Boot 3.3 【四】Spring Boot 整合JPA
  • C++ 对C的扩展
  • 西瓜书学习笔记三 归纳偏好
  • python(6) : 读取pdf的文本, 读取pdf每一页为文件
  • 详细介绍pytorch重要的API
  • 【node学习】协程
  • 【跃迁之路】【733天】程序员高效学习方法论探索系列(实验阶段490-2019.2.23)...
  • 2017 年终总结 —— 在路上
  • Hibernate最全面试题
  • HTTP 简介
  • js 实现textarea输入字数提示
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • PHP 小技巧
  • React 快速上手 - 07 前端路由 react-router
  • thinkphp5.1 easywechat4 微信第三方开放平台
  • -- 查询加强-- 使用如何where子句进行筛选,% _ like的使用
  • 给新手的新浪微博 SDK 集成教程【一】
  • 规范化安全开发 KOA 手脚架
  • 后端_ThinkPHP5
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • 入门到放弃node系列之Hello Word篇
  • 深入 Nginx 之配置篇
  • 一文看透浏览器架构
  • ‌分布式计算技术与复杂算法优化:‌现代数据处理的基石
  • # 利刃出鞘_Tomcat 核心原理解析(七)
  • # 职场生活之道:善于团结
  • #if和#ifdef区别
  • (BAT向)Java岗常问高频面试汇总:MyBatis 微服务 Spring 分布式 MySQL等(1)
  • (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作...
  • (poj1.2.1)1970(筛选法模拟)
  • (翻译)terry crowley: 写给程序员
  • (附源码)ssm高校升本考试管理系统 毕业设计 201631
  • (附源码)ssm基于jsp高校选课系统 毕业设计 291627
  • (附源码)ssm旅游企业财务管理系统 毕业设计 102100
  • (个人笔记质量不佳)SQL 左连接、右连接、内连接的区别
  • (九)c52学习之旅-定时器
  • (蓝桥杯每日一题)love
  • (十八)Flink CEP 详解
  • (学习日记)2024.01.19
  • (原)Matlab的svmtrain和svmclassify
  • .Net CF下精确的计时器
  • .net core 调用c dll_用C++生成一个简单的DLL文件VS2008
  • .NET 应用架构指导 V2 学习笔记(一) 软件架构的关键原则
  • .NET 中选择合适的文件打开模式(CreateNew, Create, Open, OpenOrCreate, Truncate, Append)
  • .NET/C#⾯试题汇总系列:集合、异常、泛型、LINQ、委托、EF!(完整版)