【Leetcode Sheet】Weekly Practice 7
Leetcode Test
1462 课程表Ⅳ(9.12)
你总共需要上 numCourses 门课,课程编号依次为 0 到 numCourses-1 。你会得到一个数组 prerequisite ,其中 prerequisites[i] = [ai, bi] 表示如果你想选 bi 课程,你 必须 先选 ai 课程。
- 有的课会有直接的先修课程,比如如果想上课程
1,你必须先上课程0,那么会以[0,1]数对的形式给出先修课程数对。
先决条件也可以是 间接 的。如果课程 a 是课程 b 的先决条件,课程 b 是课程 c 的先决条件,那么课程 a 就是课程 c 的先决条件。
你也得到一个数组 queries ,其中 queries[j] = [uj, vj]。对于第 j 个查询,您应该回答课程 uj 是否是课程 vj 的先决条件。
返回一个布尔数组 answer ,其中 answer[j] 是第 j 个查询的答案。
提示:
2 <= numCourses <= 1000 <= prerequisites.length <= (numCourses * (numCourses - 1) / 2)prerequisites[i].length == 20 <= ai, bi <= n - 1ai != bi- 每一对
[ai, bi]都 不同 - 先修课程图中没有环。
1 <= queries.length <= 1040 <= ui, vi <= n - 1ui != vi
【广度优先 + 拓扑】官解
/*** Note: The returned array must be malloced, assume caller calls free().*/
bool* checkIfPrerequisite(int numCourses, int** prerequisites, int prerequisitesSize, int* prerequisitesColSize, int** queries, int queriesSize, int* queriesColSize, int* returnSize){int g[numCourses][numCourses];int gColSize[numCourses], indgree[numCourses];bool isPre[numCourses][numCourses];memset(gColSize, 0, sizeof(gColSize));memset(indgree, 0, sizeof(indgree));memset(isPre, 0, sizeof(isPre));for (int i = 0; i < prerequisitesSize; i++) {int *p = prerequisites[i];++indgree[p[1]];g[p[0]][gColSize[p[0]]++] = p[1];}int queue[numCourses];int head = 0, tail = 0;for (int i = 0; i < numCourses; ++i) {if (indgree[i] == 0) {queue[tail++] = i;}}while (head != tail) {int cur = queue[head];head++;for (int j = 0; j < gColSize[cur]; j++) {int ne = g[cur][j];isPre[cur][ne] = true;for (int i = 0; i < numCourses; ++i) {isPre[i][ne] = isPre[i][ne] | isPre[i][cur];}--indgree[ne];if (indgree[ne] == 0) {queue[tail++] = ne;}}}bool *res = (bool *)malloc(sizeof(char) * queriesSize);for (int i = 0; i < queriesSize; i++) {int *query = queries[i];res[i] = isPre[query[0]][query[1]];}*returnSize = queriesSize;return res;
}
2596 检查骑士巡视方案(9.13)
骑士在一张 n x n 的棋盘上巡视。在有效的巡视方案中,骑士会从棋盘的 左上角 出发,并且访问棋盘上的每个格子 恰好一次 。
给你一个 n x n 的整数矩阵 grid ,由范围 [0, n * n - 1] 内的不同整数组成,其中 grid[row][col] 表示单元格 (row, col) 是骑士访问的第 grid[row][col] 个单元格。骑士的行动是从下标 0 开始的。
如果 grid 表示了骑士的有效巡视方案,返回 true;否则返回 false。
注意,骑士行动时可以垂直移动两个格子且水平移动一个格子,或水平移动两个格子且垂直移动一个格子。下图展示了骑士从某个格子出发可能的八种行动路线。
提示:
n == grid.length == grid[i].length3 <= n <= 70 <= grid[row][col] < n * ngrid中的所有整数 互不相同
【哈希表】
bool checkValidGrid(int** grid, int gridSize, int* gridColSize){//初始化hash-tableint n=gridSize;int *x=malloc(sizeof(int)*(n*n));int *y=malloc(sizeof(int)*(n*n));for(int i=0;i<n*n;i++){x[i]=0;y[i]=0;}//遍历矩阵,赋值hash-tablefor(int i=0;i<n;i++){for(int j=0;j<n;j++){int pos=grid[i][j]; //grid中的数字x[pos]=i; //hash-xy[pos]=j; //hash-y}}//定义初始值int xx=x[0],yy=y[0];bool flag=1;if(xx!=0 || yy!=0) return 0; //骑士的行动是从下标 0 开始的。//遍历hash-tablefor(int i=1;i<n*n;i++){if( (abs(x[i]-xx)==1 && abs(y[i]-yy)==2) || (abs(x[i]-xx)==2 && abs(y[i]-yy)==1) ){xx=x[i];yy=y[i];//更新上一个值}else{flag=0;break;}}return flag;
}
1222 可以攻击国王的皇后(9.14)
在一个 8x8 的棋盘上,放置着若干「黑皇后」和一个「白国王」。
给定一个由整数坐标组成的数组 queens ,表示黑皇后的位置;以及一对坐标 king ,表示白国王的位置,返回所有可以攻击国王的皇后的坐标(任意顺序)。
提示:
1 <= queens.length <= 63queens[i].length == 20 <= queens[i][j] < 8king.length == 20 <= king[0], king[1] < 8- 一个棋盘格上最多只能放置一枚棋子。
【模拟】从king开始,向8个方向寻找queen
/*** Return an array of arrays of size *returnSize.* The sizes of the arrays are returned as *returnColumnSizes array.* Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().*/
int** queensAttacktheKing(int** queens, int queensSize, int* queensColSize, int* king, int kingSize, int* returnSize, int** returnColumnSizes){//many blank, one white, 8x8//queens -- blanks, king -- whiteint n=queensSize;int pos[8][8]={0};for(int i=0;i<n;i++){pos[queens[i][0]][queens[i][1]]=1;}//queen matrixint **res=(int**)malloc(sizeof(int)*(2*n));*returnColumnSizes=(int*)malloc(sizeof(int)*(2*n));*returnSize=0;int x=king[0],y=king[1];int dir[8][2]={{1,0},{0,1},{-1,0},{0,-1},{1,1},{-1,1},{1,-1},{-1,-1}};//direction for attackfor(int i=0;i<8;i++){int tx=x+dir[i][0];int ty=y+dir[i][1];while(tx>=0 && tx<8 && ty>=0 && ty<8 && pos[tx][ty]!=1){tx+=dir[i][0];ty+=dir[i][1];}//move to the first bool flag=1;if(tx<0 || tx>7 || ty<0 || ty>7){flag=0;}if(!flag){continue;}//judge if pos out of rangeif(pos[tx][ty]==1){res[*returnSize]=(int*)malloc(sizeof(int)*2);(*returnColumnSizes)[(*returnSize)]=2; //每一个小数组,包含2维res[(*returnSize)][0]=tx;res[(*returnSize)][1]=ty;(*returnSize)++;}}return res;
}
LCP 50 宝石补给(9.15)
欢迎各位勇者来到力扣新手村,在开始试炼之前,请各位勇者先进行「宝石补给」。
每位勇者初始都拥有一些能量宝石, gem[i] 表示第 i 位勇者的宝石数量。现在这些勇者们进行了一系列的赠送,operations[j] = [x, y] 表示在第 j 次的赠送中 第 x 位勇者将自己一半的宝石(需向下取整)赠送给第 y 位勇者。
在完成所有的赠送后,请找到拥有最多宝石的勇者和拥有最少宝石的勇者,并返回他们二者的宝石数量之差。
注意:
- 赠送将按顺序逐步进行。
提示:
2 <= gem.length <= 10^30 <= gem[i] <= 10^30 <= operations.length <= 10^4operations[i].length == 20 <= operations[i][0], operations[i][1] < gem.length
【模拟】temp的那步很抽象,必须单独设置一个中间变量。
int cmp(void *a,void *b){return *(int*)a-*(int*)b;
}int giveGem(int* gem, int gemSize, int** operations, int operationsSize, int* operationsColSize){int n=operationsSize;for(int i=0;i<n;i++){int left=operations[i][0],right=operations[i][1];int temp=gem[left]/2;gem[left]-=temp;gem[right]+=temp;}qsort(gem,gemSize,sizeof(int),cmp);return gem[gemSize-1]-gem[0];
}
198 打家劫舍(9.16)
你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。
给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。
提示:
1 <= nums.length <= 1000 <= nums[i] <= 400
【动态规划】
d p [ 0 ] = n u m s [ 0 ] dp[0]=nums[0] dp[0]=nums[0]
d p [ 1 ] = m a x ( n u m s [ 0 ] , n u m s [ 1 ] ) dp[1]=max(nums[0],nums[1]) dp[1]=max(nums[0],nums[1])
d p [ n ] = m a x ( d p [ n − 1 ] , d p [ n − 2 ] + n u m s [ i ] ) , 其中 n > 1 dp[n]=max(dp[n-1],dp[n-2]+nums[i]) ,其中n>1 dp[n]=max(dp[n−1],dp[n−2]+nums[i]),其中n>1
其中Ⅲ式的含义如下:
d p [ n − 1 ] :打劫过上一家,不能打劫当前家 dp[n-1]:打劫过上一家,不能打劫当前家 dp[n−1]:打劫过上一家,不能打劫当前家
d p [ n − 2 ] + n u m s [ i ] :打劫当前家,不能打劫上一家 dp[n-2]+nums[i]:打劫当前家,不能打劫上一家 dp[n−2]+nums[i]:打劫当前家,不能打劫上一家
int rob(int* nums, int numsSize){//dynamic programmingif(numsSize==0) return 0;else if(numsSize==1) return nums[0];else if(numsSize==2) return fmax(nums[0],nums[1]);int *dp=malloc(sizeof(int)*numsSize);dp[0]=nums[0];dp[1]=fmax(nums[0],nums[1]);for(int i=2;i<numsSize;i++){dp[i]=fmax(dp[i-2]+nums[i],dp[i-1]);}return dp[numsSize-1];
}
213 打家劫舍Ⅱ(9.17)
你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警 。
给定一个代表每个房屋存放金额的非负整数数组,计算你 在不触动警报装置的情况下 ,今晚能够偷窃到的最高金额。
提示:
1 <= nums.length <= 1000 <= nums[i] <= 1000
【动态规划】参考灵神的思路
int originrob(int *nums,int start,int end){int f0=0,f1=0;for(int i=start;i<end;i++){int newf=fmax(f1,f0+nums[i]);f0=f1;f1=newf;}return f1;
}int rob(int* nums, int numsSize){//环形 考虑是否偷取num[0]//偷:dp为num[2],num[n-2]//不偷:dp为num[1],num[n-1]int n=numsSize;return fmax(nums[0]+originrob(nums,2,n-1),originrob(nums,1,n));
}
337 打家劫舍Ⅲ(9.18)
小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为 root 。
除了 root 之外,每栋房子有且只有一个“父“房子与之相连。一番侦察之后,聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。 如果 两个直接相连的房子在同一天晚上被打劫 ,房屋将自动报警。
给定二叉树的 root 。返回 *在不触动警报的情况下 ,小偷能够盗取的最高金额* 。
提示:
- 树的节点数在
[1, 104]范围内 0 <= Node.val <= 104
【哈希表 + 动态规划】
/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*///f代表选择当前节点,g代表不选择
//当前节点选择,子节点不能选,f(cur)=g(left)+g(right)
//当前节点不选择,子节点可选可不选,g(cur)=max{f(left),g(left)} + max{f(right),g(right)}class Solution {
public:unordered_map<TreeNode*,int> f,g;void dfs(TreeNode* node){if(node==NULL) return;dfs(node->left);dfs(node->right);f[node]=node->val+g[node->left]+g[node->right];g[node]=max(f[node->left],g[node->left])+max(f[node->right],g[node->right]);}int rob(TreeNode* root) {dfs(root);return max(f[root],g[root]);}
};
相关文章:
【Leetcode Sheet】Weekly Practice 7
Leetcode Test 1462 课程表Ⅳ(9.12) 你总共需要上 numCourses 门课,课程编号依次为 0 到 numCourses-1 。你会得到一个数组 prerequisite ,其中 prerequisites[i] [ai, bi] 表示如果你想选 bi 课程,你 必须 先选 ai 课程。 有的课会有直接…...
leetcode Top100(23)回文链表
给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 输入:head [1,2,2,1] 输出:true采用动态数组,判断数组对称就可以了(这解法空间…...
WebGL绘制圆形的点
目录 前言 如何实现圆形的点? 片元着色器内置变量(gl_FragCoord、gl_PointCoord) gl_PointCoord的含义 示例程序(RoundedPoint.js) 代码详解 前言 本文将讨论示例程序RoundedPoint,该程序绘制了圆…...
《The Rise and Potential of Large Language Model Based Agents: A Survey》全文翻译
The Rise and Potential of Large Language Model Based Agents: A Surve - 基于 LLMs 的代理的兴起和潜力:一项调查 论文信息摘要1. 介绍2. 背景2.1 AI 代理的起源2.2 代理研究的技术趋势2.3 为什么大语言模型适合作为代理大脑的主要组件 论文信息 题目࿱…...
在线地图获取城市路网数据
在线地图获取城市路网数据 近期科研项目中,需要获取城市路网数据,于是详细阅读各大在线地图api接口,总结出来这么一条可行的思路: 首先获取城市轮廓根据城市轮廓把城市分割成若干个小块在每个小块中根据在线地图的POI检索接口&a…...
8.2 Jmeter if控制器使用
前提:jmeter脚本需要用到if控制器,if判断如果查询不到,则去新增。 1、添加if控制器 线程组-->逻辑控制器-->如果(if)控制器 1)、Expression (must evaluate to true or false) :表达式(值必须是tru…...
科技云报道:青云科技打出“AI算力牌”,抢跑“云+AI”新增市场
科技云报道原创。 近三年,中国云计算市场在多个维度同时发生着剧烈变化——疫情极大加速了全社会对于数字化的认知和接受程度;一系列云原生技术依托着开源和蓬勃的市场而迅速发展演变,更多产品和技术名词同时涌向市场;国际关系复…...
学习路之PHP--lumen安装配置
一、下载lumen源码 composer create-project --prefer-dist laravel/lumen blog 安装lumen-generator composer require flipbox/lumen-generator 二、配置 bootstrap\app.php 97行 $app->register(Flipbox\LumenGenerator\LumenGeneratorServiceProvider::class);三、生成…...
【C++】构造函数和析构函数第一部分(构造函数和析构函数的作用)--- 2023.9.25
目录 前言初始化和清理的概念构造函数和析构函数的作用构造函数的作用析构函数的作用 使用构造函数和析构函数的注意事项默认的构造函数和析构函数结束语 前言 在使用c语言开发的项目场景中,我们往往会遇到申请空间的需求,同时也肯定遇到过程序运行一段…...
CocosCreator3.8研究笔记(二十一)CocosCreator Tween系统理解
在 Cocos Creator 3.x 版本中, Tween系统代替了原来的Action系统。很多朋友不明白Tween到底是什么,Tween原理是什么?怎么使用Tween? 今天就来详细了解一下,希望能帮助到大家加深对Tween的了解,并快速掌握Tw…...
大数据学习-目录
学习内容持续更新ing 1.大数据学习1.0-Centos8虚拟机安装 大数据学习1.0-Centos8虚拟机安装_汉卿HanQ的博客-CSDN博客 2.大数据学习1.1-Centos8网络配置 大数据学习1.1-Centos8网络配置_汉卿HanQ的博客-CSDN博客 3.大数据学习1.2-yum配置 大数据学习1.2-yum配置_汉卿HanQ的…...
《动手学深度学习 Pytorch版》 7.5 批量规范化
7.5.1 训练深层网络 训练神经网络的实际问题: 数据预处理的方式会对最终结果产生巨大影响。 训练时,多层感知机的中间层变量可能具有更广的变化范围。 更深层的网络很复杂容易过拟合。 批量规范化对小批量的大小有要求,只有批量大小足够…...
Toaster - Android 吐司框架,专治 Toast 各种疑难杂症
官网 https://github.com/getActivity/Toaster 这可能是性能优、使用简单,支持自定义,不需要通知栏权限的吐司 想了解实现原理的可以点击此链接查看:Toaster 源码 集成步骤 如果你的项目 Gradle 配置是在 7.0 以下,需要在 bui…...
2023年9月26日,历史上的今天大事件早读
1620年9月26日大明皇帝朱常洛驾崩 1815年9月26日俄、普、奥三国在巴黎发表缔结“神圣同盟” 1841年9月26日清代思想家、诗人龚自珍逝世 1849年9月26日“生理学之父”巴甫洛夫诞生 1909年9月26日云南陆军讲武堂创办 1953年9月26日画家徐悲鸿逝世 1980年9月26日国际宇航联合…...
CListCtrl控件为只显示一列,持滚动显示其他,不用SetScrollFlags
CListCtrl控件为只显示一列,持滚动显示其他,不用SetScrollFlags 2023/9/5 下午4:52:58 如果您不希望使用 SetScrollFlags 函数来设置滚动条样式,可以使用以下代码将 CListCtrl 控件设置为只显示一列,并支持滚动显示其他内容: cpp // 设置控件样式和属性 m_listCtrl.Se…...
spring博客实现分页查询
1、首先创建dto下的分页类PageBean package com.zzz.blog.dto;import java.util.List;public class PageBean {private Integer pageSize; //页面大小private Integer currentPage; //当前页private Integer totalCount; //总条数private Integer totalPage; //总页数private …...
代码阅读分析神器-Scitools Understand
这里写目录标题 前言概要功能介绍1.代码统计2.图形化分析3.代码检查 使用方法下载及使用 前言 作为一名程序员,阅读代码是一个必须要拥有的能力,但无奈很多代码逻辑嵌套非常多,看起来非常吃力,看了那段逻辑就忘记了刚才的逻辑&am…...
学霸吐血整理‼《2023 年 IC 验证岗面试真题解析》宝藏干货!
Q1.定宽数组、动态数组、关联数组、队列各自的特点和使用方式。 Q2.fork…join/fork…join_any/fork…join_none 之间的异同 Q3.mailbox、event、semaphore 之间的异同 Q4.(event_handle)和 wait(event_handle.triggered)区别 Q5.task 和 function 异同区别 Q6.使用 clocking b…...
稳定性、可靠性、可用性、灵活性、解耦性
稳定性 平衡的能力 Linux系统的OOM机制、tcp的拥塞控制 可靠性 确定的能力 tcp的ACK、HA机制、加密 可用性 复原的能力 负债均衡、tcp的重传、冗余机制、故障域 灵活性 界限的能力 用户态、restful api、IP地址掩码 解耦性 不依赖的能力 分布式、SDN、容器、操作…...
docker搭建Redis三主三从
docker搭建Redis三主三从 首先启动6个redis进入容器构建主从关系连接进入6381作为切入点,查看集群状态 首先启动6个redis [rootdocker redis-node-1]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 …...
IDEA运行Tomcat出现乱码问题解决汇总
最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...
挑战杯推荐项目
“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 - 个性化梦境…...
定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...
在四层代理中还原真实客户端ngx_stream_realip_module
一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡(如 HAProxy、AWS NLB、阿里 SLB)发起上游连接时,将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后,ngx_stream_realip_module 从中提取原始信息…...
CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云
目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...
浅谈不同二分算法的查找情况
二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况…...
保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek
文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama(有网络的电脑)2.2.3 安装Ollama(无网络的电脑)2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...
人机融合智能 | “人智交互”跨学科新领域
本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要: 近期,在使用较新版本的OpenSSH客户端连接老旧SSH服务器时,会遇到 "no matching key exchange method found", "n…...
基于Springboot+Vue的办公管理系统
角色: 管理员、员工 技术: 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能: 该办公管理系统是一个综合性的企业内部管理平台,旨在提升企业运营效率和员工管理水…...
