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

LeetCode 第54~55题

LeetCode 第54题:螺旋矩阵

给你一个m行n列的矩阵matrix,请你按照顺时针螺旋顺序,返回矩阵中的所有元素。

示例1:

输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,3,6,9,8,7,4,5]

示例2:

输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
输出:[1,2,3,4,8,12,11,10,9,5,6,7]

提示:

  • m == matrix.length
  • n == matrix[i].length
  • 1 <= m, n <= 10
  • -100 <= matrix[i][j] <= 100

解题思路:

  •  对于已经访问过的数字,可将其标记为无穷或者null,从而避免重复访问。
  • 用一个长为4的方向数组DIRS = [(0,1),(1,0),(0,-1),(-1,0)]分别表示右下左上四个方向。同时用一个下标di表示当前方向,初始值为0。
  • 每次移动,相当于把行号增加DIRS[di][0],把列号增加DIRS[di][1]。
  • 向右转90°,相当于把di增加1,但在di=3时要回到di=0。两种情况合二为一,把di更新为(di+1)mod 4。
const int DIRS[4][2]={{0,1},{1,0},{0,-1},{-1,0}};//右下左上int *spiralOrder(int** matrix,int matrixSize,int* matrixColSize,int* returnSize)
{int m=matrixSize,n=matrixColSize[0];int* ans = malloc(m*n*sizeof(int));*returnSize = m*n;int i=0,j=0,di=0;for(int k=0,k<m*n;k++){ans[k] = matrix[i][j];matrix[i][j]=INT_MAX;//标记int x=i+DIRS[di][0],y=j+DIRS[di][1];//下一步的位置//如果出界或者已经访问过if(x<0||x>=m||y<0||y>=n||matrix[x][y]==INT_MAX)di = (di+1)%4;  //右转90°i=i+DIRS[di][0],j=j+DIRS[di][1];//向该方向走一步}return ans;
}

LeetCode 第55题:跳跃游戏

题目描述:

给你一个非负整数数组nums,你最初位于数组的第一个下标。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标,如果可以,返回true,否则返回false。

示例1:

输入:nums = [2,3,1,1,4]
输出:true
解释:可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。

示例2:

输入:nums = [3,2,1,0,4]
输出:false
解释:无论怎样,总会到达下标为 3 的位置。但该下标的最大跳跃长度是 0 , 所以永远不可能到达最后一个下标。

提示:

  • 1 <= nums.length <= 104

  • 0 <= nums[i] <= 105

解题思路:

nums=[3,2,1,0,4]
inums[i]​i+nums[i]​mx
0333
1233
2133
3033
448失败

nums=[2,3,1,1,4]

inums[i]​i+nums[i]​mx
0222
1344
2134
3144
4488
  • 从左到右遍历nums,同时维护能跳到的最远位置mx,初始值为0。
  • 如果i>mx,说明无法跳到i,返回false。
  • 否则,用i+nums[i],更新mx的最大值。
  • 如果循环中没有返回false,那么最后返回true。
#define MAX(a,b)  ((b)>(a)?(b):(a));bool canJump(int* nums,int numsSize)
{int mx = 0;//标记值for(int i=0;i<numsSize;i++){if(i>mx)  return false;mx = MAX(mx,i+nums[i]);//从i最右可以跳到i+nums[i]}return true;
}

相关文章:

  • CentOS 操作系统下搭建 tsung性能测试环境
  • TCP实现多线程远程命令执行
  • TCP粘包:数据为何‘难舍难分’?拆解底层原理与实战解决方案
  • 解释`new`关键字的执行过程,并手动实现一个`myNew`函数。
  • Vue快速入门
  • pandas中curr函数报错ValueError: could not convert string to float: ‘RL‘解决办法
  • 《Operating System Concepts》阅读笔记:p700-p732
  • Vue3+TS快速学习
  • 【Python使用】嘿马python运维开发全体系教程第4篇:四、Linux基本命令(上)【附代码文档】
  • 鸿蒙应用(医院诊疗系统)开发篇2·Axios网络请求封装全流程解析
  • Python单例设计模式深度解析
  • 统计分析相关基础概念解释
  • 预警,曾TRO冻结超500店,高地牛再维权
  • 信息化项目交付为什么越来越难?
  • [随笔杂谈] 计算机编程 —— 环境变量究竟是个什么东西?我该如何配置它?
  • 日本Shopify 3月数据:家居品类销售额激增120%!
  • 用Allan Deviation的方式估计长时间频率偏差
  • 数据结构和算法(六)--栈队列堆
  • LeetCode算法题(Go语言实现)_49
  • 【AIoT】智能硬件GPIO通信详解(二)
  • 购物网站建设流程/专业的网页制作公司
  • 墨刀做的网站设计/seo算法优化
  • 能看全世界地图的app/东莞关键词seo
  • 网站建设发信息/如何成为百度广告代理商
  • jsp新闻网站/数据分析培训机构哪家好
  • VPS如何做镜像网站/seo搜索排名优化公司