【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 <= 100
0 <= prerequisites.length <= (numCourses * (numCourses - 1) / 2)
prerequisites[i].length == 2
0 <= ai, bi <= n - 1
ai != bi
- 每一对
[ai, bi]
都 不同 - 先修课程图中没有环。
1 <= queries.length <= 104
0 <= ui, vi <= n - 1
ui != 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].length
3 <= n <= 7
0 <= grid[row][col] < n * n
grid
中的所有整数 互不相同
【哈希表】
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 <= 63
queens[i].length == 2
0 <= queens[i][j] < 8
king.length == 2
0 <= 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^3
0 <= gem[i] <= 10^3
0 <= operations.length <= 10^4
operations[i].length == 2
0 <= 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 <= 100
0 <= 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 <= 100
0 <= 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 …...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...

Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”
2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

android RelativeLayout布局
<?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android:gravity&…...

Linux部署私有文件管理系统MinIO
最近需要用到一个文件管理服务,但是又不想花钱,所以就想着自己搭建一个,刚好我们用的一个开源框架已经集成了MinIO,所以就选了这个 我这边对文件服务性能要求不是太高,单机版就可以 安装非常简单,几个命令就…...

Python训练营-Day26-函数专题1:函数定义与参数
题目1:计算圆的面积 任务: 编写一个名为 calculate_circle_area 的函数,该函数接收圆的半径 radius 作为参数,并返回圆的面积。圆的面积 π * radius (可以使用 math.pi 作为 π 的值)要求:函数接收一个位置参数 radi…...
Vue3中的computer和watch
computed的写法 在页面中 <div>{{ calcNumber }}</div>script中 写法1 常用 import { computed, ref } from vue; let price ref(100);const priceAdd () > { //函数方法 price 1price.value ; }//计算属性 let calcNumber computed(() > {return ${p…...
深入浅出WebGL:在浏览器中解锁3D世界的魔法钥匙
WebGL:在浏览器中解锁3D世界的魔法钥匙 引言:网页的边界正在消失 在数字化浪潮的推动下,网页早已不再是静态信息的展示窗口。如今,我们可以在浏览器中体验逼真的3D游戏、交互式数据可视化、虚拟实验室,甚至沉浸式的V…...