LeeCode 977:有序数组的平方

题目描述:

给你一个按非递减顺序排列的整数数组nums,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。

标签:数组,首尾指针,最大值优先

时间复杂度:O(N)

建立模型:

  1. 定义首、尾指针(首指针指向nums[0],尾指针指向nums[len(nums) - 1])
  2. 比较首尾指针元素的绝对值(绝对值的大小和平方是一致的)
  3. 若首指针元素的绝对值大于等于尾指针元素,则将首指针元素的平方添加到结果res的尾部,然后首指针右移
  4. 若首指针元素的绝对值小于尾指针元素,则将尾指针元素的平方添加到结果res的尾部,然后尾指针左移
  5. 重复步骤2、3、4,直至所有元素添加完毕

代码实现:

# Python3 实现
def sorted_squares(nums: List[int]) -> List[int]:
res = [0 for _ in range(len(nums))]
i, j = 0, len(nums) - 1
cur = len(nums) - 1 #表示当前插入res的位置 while i <= j:
if abs(nums[i]) >= abs(nums[j]):
res[cur] = pow(nums[i], 2)
i += 1
else:
res[cur] = pow(nums[j], 2)
j -= 1
cur -= 1 return res
// Java 实现
public int[] sorted_squares(int[] nums) {
int[] res = new int[nums.length];
int i = 0, j = nums.length - 1;
int cur = nums.length - 1; while (i <= j) {
if (Math.abs(nums[i]) >= Math.abs(nums[j])) {
res[cur] = nums[i] * nums[i];
i += 1;
}
else {
res[cur] = nums[j] * nums[j];
j -= 1;
} cur -= 1;
} return res;
}

LeeCode 209:长度最小的子数组

题目描述:

给定一个含n个正整数的数组和一个正整数target。找出该数组中满足其和\(\ge target\)的长度最小的**连续子数组,并返回其长度。若不存在符合条件的子数组,则返回0。

标签:数组,滑动窗口,前缀和

时间复杂度:O(N)

建立模型:

  1. 定义窗口的起始位置和窗口的结束位置
  2. 计算窗口内元素的和sum
  3. 如果 \(sum \ge target\),则比较窗口和res的大小,取其中较小的值,并将窗口起始位置右移
  4. 如果 \(sum < target\),则将窗口结束位置右移
  5. 重复步骤2、3、4,直至窗口结束位置到达数组尾部

代码实现:

# Python3 实现
def min_sub_array_len(target: int, nums: List[int]) -> int:
res = len(nums) + 1
i, s = 0, 0 # i: 滑动窗口起始位置, s: 滑动窗口内元素和
for j in range(len(nums)): # j: 滑动窗口结束位置
s += nums[j]
while s >= target:
res = min(res, j - i + 1)
s -= nums[i]
i += 1 return res if res < len(nums) + 1 else 0
// Java 实现
public int min_sub_array_len(int target, int[] nums) {
int res = Integer.MAX_VALUE;
int i = 0, sum = 0;
for(int j = 0; j < nums.length; j++) {
sum += nums[j];
while (sum >= target) {
res = Math.min(res, j - i + 1);
sum -= nums[i];
i += 1;
}
} return res == Integer.MAX_VALUE ? 0 : res;
}

LeeCode 59:螺旋矩阵

题目描述:

给你一个正整数n,生成一个包含1到\(n^2\)所有元素,且元素按顺时针顺序螺旋排列的n×n正方形矩阵matrix

标签:数组,矩阵,模拟

时间复杂度:\(O(N^2)\)

建立模型:

  1. 定义填充矩阵时的4个移动方向,并按顺序排列(即\(右移 \rightarrow下移 \rightarrow 左移 \rightarrow 上移\))
  2. 填充当前位置,并计算下一个填充位置,判断其是否为有效位置
  3. 若位置有效,则下一个填充位置即是此位置
  4. 若位置无效,则需要改变移动方向,重新计算下一个填充位置(改变方向之后的第一个填充位置一定是有效位置,所以无需判断该位置是否有效)
  5. 重复2、3、4,直至所有位置填充完毕

代码实现:

# Python3 实现
def generate_matrix(n: int) -> List[List[int]]:
# (0, 1): 水平右移; (1, 0): 垂直下移; (0, -1): 水平左移; (-1, 0): 垂直上移
directions = [(0, 1), (1, 0), (0, -1), (-1, 0)]
index = 0
row, col = 0, 0 res = [[0 for _ in range(n)] for _ in range(n)]
for num in range(1, pow(n, 2) + 1):
res[row][col] = num
(dx, dy) = directions[index]
new_row, new_col = row + dx, col + dy # 计算下一个填充的位置 # 判断下一个填充的位置是否有效
# res[new_row][new_col] > 0 表示该位置已填充过
if new_row < 0 or new_row >= n or new_col < 0 or new_col >= n or res[new_row][new_col] > 0:
index = (index + 1) % 4
(dx, dy) = directions[index]
row, col = row + dx, col + dy return res
// Java 实现
public int[][] generate_matrix(int n) {
int[][] res = new int[n][n];
int[][] directions = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}}; int index = 0;
int row = 0, col = 0;
for (int num = 1; num <= n * n; num++) {
res[row][col] = num;
int new_row = row + directions[index][0];
int new_col = col + directions[index][1];
if(new_row < 0 || new_row >= n || new_col < 0 || new_col >= n || res[new_row][new_col] > 0) {
index = (index + 1) % 4;
} row = row + directions[index][0];
col = col + directions[index][1];
} return res;
}

LeeCode数组问题(二)的更多相关文章

  1. [LeetCode] Convert Sorted Array to Binary Search Tree 将有序数组转为二叉搜索树

    Given an array where elements are sorted in ascending order, convert it to a height balanced BST. 这道 ...

  2. C#的一维数组和二维数组定义方式:

    一维数组: //一维数组定义与初始化 ,, };//第一种方式 , , }; //第二种方式 int[] one3; //第三种方式 one3=,,}; 二维数组: //二维数组定义与初始化 //不规 ...

  3. 66. 有序数组构造二叉搜索树[array to binary search tree]

    [本文链接] http://www.cnblogs.com/hellogiser/p/array-to-binary-search-tree.html [题目] 编写一个程序,把一个有序整数数组放到二 ...

  4. 转: 浅谈C/C++中的指针和数组(二)

    转自:http://www.cnblogs.com/dolphin0520/archive/2011/11/09/2242419.html 浅谈C/C++中的指针和数组(二) 前面已经讨论了指针和数组 ...

  5. C# 数组、一维数组、二维数组、多维数组、锯齿数组

    C#  数组.一维数组.二维数组.多维数组.锯齿数组 一.数组: 如果需要使用同一类型的对象,就可以使用数组,数组是一种数据结构,它可以包含同一类型的多个元素.它的长度是固定的,如长度未知的情况下,请 ...

  6. java学习之数组(二)

    在上一节中我们讲到了数组的概念,定义,以及在内存当中的表现形式.那么这里我们来说一下,数组的另一种定义方式. 在上一篇当中我们规定是这个样子定义数组的, class ArrDemo { public ...

  7. c#简单实现二维数组和二维数组列表List&lt;&gt;的转置

    刚看到网上一篇文章里用sql实现了行列转置.sql server 2005/2008只用一个pivot函数就可以实现sql server 2000很多行的复杂实现.提到转置,立刻想起还在求学阶段曾经做 ...

  8. java - day005 - 数组工具类, 数组复制,二维数组,变量,方法, 面向对象

    1. java.util.Arrays  数组工具类    Arrays.toString (数组) 数组值链接字符串 Arrays.sort(数组) 基本类型: 优化的快速排序 引用类型: 优化的合 ...

  9. Java数组之二维数组

    Java中除了一维数组外,还有二维数组,三维数组等多维数组.本文以介绍二维数组来了解多维数组. 1.二维数组的基础 二维数组的定义:二维数组就是数组的数组,数组里的元素也是数组. 二维数组表示行列二维 ...

  10. java基础5 (一维)数组和二维数组

    本文知识点(目录): 一维数组(一维数组的概念.优点.格式.定义.初始化.遍历.常见异常.内存分析以及常见操作(找最大值.选择排序.冒泡排序等等))    二维数组(二维数组的遍历.排序.查找.定义. ...

随机推荐

  1. java 操作 zookeeper

    pom.xml<dependency> <groupId>com.101tec</groupId> <artifactId>zkclient</a ...

  2. 使用NTC计算温度,增加计算精度的算法

    uint16_t uGetPCB_Temperature(void) { uint16_t x; float Adcn; float k; Adcn = userADC_var.ADCMeasureV ...

  3. Openssl自签证书|Nginx配置全站HTTPS,包括WSS(websocket)

    一.生成自签证书 如果有购买证书的,可忽略此步骤. 生成方法一: openssl genrsa -des3 -out ca.key 1024 openssl rsa -in ca.key -out c ...

  4. FIRE2023:殁亡漫谈

    FIRE2023:殁亡漫谈 读书的时候,想到殁亡,脑海涌出一则喜欢的遗言: 钱花完了,我走了.签名 如果可能牵涉到旁人(比如殁在旅馆里),就再立一则: 我的殁与店家无关. 签名 然后放下Kindle, ...

  5. nvm的下载安装

    nvm下载地址:https://github.com/coreybutler/nvm-windows/releases 下载包,双击安装,选取路径, 注意:如果按默认的,安装在c盘的话,那之后的切换版 ...

  6. CentOS7更改阿里源

    阿里云yum源:1)备份当前yum源防止出现意外还可以还原回来cd /etc/yum.repos.d/cp /CentOS-Base.repo /CentOS-Base-repo.bak2)使用wge ...

  7. 学习记录--C++文件读入与存储

    C++中对文件操作需要包含头文件<fstream> 操作文件的三大类:1.ofstream写操作 2.ifstream读操作 3.fstream读写操作 一.写文件步骤 1.包含头文件 # ...

  8. laravel groupBy 分页

    $model=DB::table('tablebname') ->where(function($query) use ($res){ $query->where('xx','xx'); ...

  9. 使用Vue脚手架

    关于不同版本的Vue: vue.js与vue.runtime.xxx.js的区别: (1) vue.js是完整版的Vue,包含: 核心功能+模板解析器 (2) vue.runtime.xxx.js是运 ...

  10. 谈谈Selenium中的日志

    谈谈Selenium中的日志 来源于一位同学,"老师为啥firefox执行后会有日志文件,chrome没有呢?" 比对 你打开chrome浏览器 from selenium imp ...