代码随想录-Day49

300. 最长递增子序列

给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。

子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的
子序列

示例 1:

输入:nums = [10,9,2,5,3,7,101,18]
输出:4
解释:最长递增子序列是 [2,3,7,101],因此长度为 4 。
示例 2:

输入:nums = [0,1,0,3,2,3]
输出:4
示例 3:

输入:nums = [7,7,7,7,7,7,7]
输出:1
在这里插入图片描述

class Solution {public int lengthOfLIS(int[] nums) {if (nums.length <= 1) return nums.length;int[] dp = new int[nums.length];int res = 1;Arrays.fill(dp, 1);for (int i = 1; i < dp.length; i++) {for (int j = 0; j < i; j++) {if (nums[i] > nums[j]) {dp[i] = Math.max(dp[i], dp[j] + 1);}}res = Math.max(res, dp[i]);}return res;}
}

这段代码是用于解决「最长递增子序列」(Longest Increasing Subsequence, LIS)问题的Java实现。给定一个整数数组 nums,目标是找到其中最长的严格递增子序列的长度。这里所说的子序列是指原序列中删除一些或不删除元素且保持剩余元素的相对顺序不变形成的序列。

代码解析

  1. 边界情况处理:

    • 如果 nums 的长度小于等于1,那么最长递增子序列的长度就是数组的长度本身,因为单个元素或空数组本身就是递增的。
  2. 初始化动态规划数组:

    • 创建一个与 nums 长度相等的数组 dp,其中 dp[i] 代表以 nums[i] 结尾的最长递增子序列的长度。初始化 dp 数组的所有元素为1,因为至少每个元素自身都可以构成长度为1的递增子序列。
  3. 动态规划迭代:

    • 从数组的第二个元素开始迭代,对于每一个元素 nums[i](从索引1开始),遍历其前面的所有元素 nums[j](从索引0到 i-1)。
    • 如果当前元素 nums[i] 大于前面的某个元素 nums[j],那么可以尝试构建一个新的递增子序列,其长度为以 nums[j] 结尾的最长递增子序列的长度加1,即 dp[j] + 1
    • 更新 dp[i] 为所有可能的递增子序列长度中的最大值,这确保了 dp[i] 始终保存的是以 nums[i] 结尾的最长递增子序列的长度。
  4. 记录结果:

    • 在每次更新 dp[i] 后,同时更新全局最大值 res,以确保在整个迭代过程中始终保存最长递增子序列的长度。
  5. 返回结果:

    • 最后返回 res,即整个数组中的最长递增子序列的长度。

时间复杂度和空间复杂度

  • 时间复杂度: O(n^2),其中 n 是数组 nums 的长度。这是因为对于数组中的每个元素,都需要遍历其前面的所有元素来计算最长递增子序列的长度。
  • 空间复杂度: O(n),需要一个长度为 n 的动态规划数组 dp 来存储中间结果。

总结

这段代码通过动态规划的方法,有效地解决了最长递增子序列问题。尽管时间复杂度为 O(n^2),但在许多实际应用场景中,这样的性能通常是可接受的。如果需要更高效的算法(如 O(n log n) 的时间复杂度),则可以采用更复杂的算法,例如结合二分查找的优化版本。

674. 最长连续递增序列

给定一个未经排序的整数数组,找到最长且 连续递增的子序列,并返回该序列的长度。

连续递增的子序列 可以由两个下标 l 和 r(l < r)确定,如果对于每个 l <= i < r,都有 nums[i] < nums[i + 1] ,那么子序列 [nums[l], nums[l + 1], …, nums[r - 1], nums[r]] 就是连续递增子序列。

示例 1:

输入:nums = [1,3,5,4,7]
输出:3
解释:最长连续递增序列是 [1,3,5], 长度为3。
尽管 [1,3,5,7] 也是升序的子序列, 但它不是连续的,因为 5 和 7 在原数组里被 4 隔开。
示例 2:

输入:nums = [2,2,2,2,2]
输出:1
解释:最长连续递增序列是 [2], 长度为1。
在这里插入图片描述

方法一:动态规划

 /*** 1.dp[i] 代表当前下标最大连续值* 2.递推公式 if(nums[i+1]>nums[i]) dp[i+1] = dp[i]+1* 3.初始化 都为1* 4.遍历方向,从其那往后* 5.结果推导 。。。。* @param nums* @return*/public static int findLengthOfLCIS(int[] nums) {int[] dp = new int[nums.length];for (int i = 0; i < dp.length; i++) {dp[i] = 1;}int res = 1;//可以注意到,這邊的 i 是從 0 開始,所以會出現和卡哥的C++ code有差異的地方,在一些地方會看到有 i + 1 的偏移。for (int i = 0; i < nums.length - 1; i++) {if (nums[i + 1] > nums[i]) {dp[i + 1] = dp[i] + 1;}res = res > dp[i + 1] ? res : dp[i + 1];}return res;}

这段代码是用于解决「最长连续递增序列」(Longest Continuous Increasing Subsequence, LCIS)问题的Java实现。给定一个整数数组 nums,目标是找到其中最长的连续严格递增序列的长度。

代码解析

  1. 初始化动态规划数组:

    • 创建一个与 nums 长度相等的数组 dp,其中 dp[i] 代表以 nums[i] 结尾的最长连续递增序列的长度。初始化 dp 数组的所有元素为1,因为至少每个元素自身都可以构成长度为1的连续递增序列。
  2. 动态规划迭代:

    • 从数组的第一个元素开始迭代,直到倒数第二个元素(因为需要比较当前元素与其下一个元素的关系),对于每一个元素 nums[i](从索引0开始到 nums.length - 2)。
    • 如果当前元素 nums[i] 小于其下一个元素 nums[i + 1],那么可以构建一个新的连续递增序列,其长度为以 nums[i] 结尾的最长连续递增序列的长度加1,即 dp[i] + 1
    • 更新 dp[i + 1] 为这个新的连续递增序列的长度。
  3. 记录结果:

    • 在每次更新 dp[i + 1] 后,同时更新全局最大值 res,以确保在整个迭代过程中始终保存最长连续递增序列的长度。
  4. 返回结果:

    • 最后返回 res,即整个数组中的最长连续递增序列的长度。

特别注意

在迭代过程中,由于 dp 数组的更新是基于前一个元素的值,因此迭代的方向是从前往后,这确保了在更新 dp[i + 1] 时,dp[i] 已经包含了正确的信息。

时间复杂度和空间复杂度

  • 时间复杂度: O(n),其中 n 是数组 nums 的长度。这是因为只需要遍历数组一次来计算最长连续递增序列的长度。
  • 空间复杂度: O(n),需要一个长度为 n 的动态规划数组 dp 来存储中间结果。

总结

这段代码通过动态规划的方法,有效地解决了最长连续递增序列问题。相比于最长递增子序列问题,最长连续递增序列问题的时间复杂度更低,因为不需要对每个元素都进行前面所有元素的比较,只需关注相邻元素之间的关系。

方法二:动态规划状态压缩

class Solution {public int findLengthOfLCIS(int[] nums) {// 记录以 前一个元素结尾的最长连续递增序列的长度 和 以当前 结尾的......int beforeOneMaxLen = 1, currentMaxLen = 0;// res 赋最小值返回的最小值1int res = 1;for (int i = 1; i < nums.length; i ++) {currentMaxLen = nums[i] > nums[i - 1] ? beforeOneMaxLen + 1 : 1;beforeOneMaxLen = currentMaxLen;res = Math.max(res, currentMaxLen);}return res;}
}

这段代码是解决「最长连续递增序列」(Longest Continuous Increasing Subsequence, LCIS)问题的另一种高效实现,它采用了空间优化的动态规划方法。给定一个整数数组 nums,目标是找到其中最长的连续严格递增序列的长度。

代码解析

  1. 初始化变量:

    • beforeOneMaxLen:表示以当前元素的前一个元素结尾的最长连续递增序列的长度。
    • currentMaxLen:表示以当前元素结尾的最长连续递增序列的长度。初始化时,这个变量没有实际意义,因为真正的计算在循环中进行。
    • res:用于记录整个数组中的最长连续递增序列的长度,初始化为1,因为至少每个元素自身都可以构成长度为1的连续递增序列。
  2. 动态规划迭代:

    • 从数组的第二个元素开始迭代,对于每一个元素 nums[i](从索引1开始到 nums.length - 1)。
    • 如果当前元素 nums[i] 大于其前一个元素 nums[i - 1],那么可以构建一个新的连续递增序列,其长度为以 nums[i - 1] 结尾的最长连续递增序列的长度加1,即 beforeOneMaxLen + 1
    • 如果当前元素不大于其前一个元素,那么以当前元素结尾的最长连续递增序列的长度重置为1,因为连续递增被中断,新的连续递增序列从当前元素开始。
    • 更新 beforeOneMaxLencurrentMaxLen,以准备下一次迭代。
  3. 记录结果:

    • 在每次更新 currentMaxLen 后,同时更新全局最大值 res,以确保在整个迭代过程中始终保存最长连续递增序列的长度。
  4. 返回结果:

    • 最后返回 res,即整个数组中的最长连续递增序列的长度。

特别注意

与之前版本相比,这段代码在空间复杂度上进行了优化,不再需要一个与输入数组相同长度的动态规划数组 dp,而是仅使用几个变量来保存必要的状态信息,这大大减少了空间占用。

时间复杂度和空间复杂度

  • 时间复杂度: O(n),其中 n 是数组 nums 的长度。这是因为只需要遍历数组一次来计算最长连续递增序列的长度。
  • 空间复杂度: O(1),仅使用了固定数量的变量,与输入数组的大小无关。

总结

这段代码通过动态规划的方法,有效地解决了最长连续递增序列问题,同时在空间复杂度方面进行了优化,使得算法更加高效。相比于传统的动态规划实现,这种空间优化的方法在处理大规模数据时表现更佳。

方法三:贪心法

public static int findLengthOfLCIS(int[] nums) {if (nums.length == 0) return 0;int res = 1; // 连续子序列最少也是1int count = 1;for (int i = 0; i < nums.length - 1; i++) {if (nums[i + 1] > nums[i]) { // 连续记录count++;} else { // 不连续,count从头开始count = 1;}if (count > res) res = count;}return res;
}

这段代码是解决「最长连续递增序列」(Longest Continuous Increasing Subsequence, LCIS)问题的简洁实现。给定一个整数数组 nums,目标是找到其中最长的连续严格递增序列的长度。

代码解析

  1. 边界情况处理:

    • 如果 nums 的长度为0,那么最长连续递增序列的长度自然为0。
  2. 初始化变量:

    • res:用于记录整个数组中的最长连续递增序列的长度,初始化为1,因为至少每个元素自身都可以构成长度为1的连续递增序列。
    • count:表示当前正在统计的连续递增序列的长度,初始化为1。
  3. 动态检查与更新:

    • 从数组的第一个元素开始迭代,直到倒数第二个元素,对于每一个元素 nums[i](从索引0开始到 nums.length - 2)。
    • 如果当前元素 nums[i] 小于其下一个元素 nums[i + 1],那么当前正在统计的连续递增序列的长度 count 加1。
    • 如果当前元素不小于其下一个元素,那么当前连续递增序列被中断,count 重置为1,从下一个元素重新开始统计新的连续递增序列的长度。
  4. 记录结果:

    • 在每次更新 count 后,同时更新全局最大值 res,以确保在整个迭代过程中始终保存最长连续递增序列的长度。
  5. 返回结果:

    • 最后返回 res,即整个数组中的最长连续递增序列的长度。

时间复杂度和空间复杂度

  • 时间复杂度: O(n),其中 n 是数组 nums 的长度。这是因为只需要遍历数组一次来计算最长连续递增序列的长度。
  • 空间复杂度: O(1),仅使用了固定数量的变量,与输入数组的大小无关。

总结

这段代码通过简单直观的方式,有效地解决了最长连续递增序列问题。相比于使用动态规划数组的传统方法,这段代码不仅易于理解和实现,而且在空间复杂度方面表现出色,仅使用了几个变量,非常适合处理大规模数据集。此外,这种方法避免了动态规划中可能存在的冗余计算,提高了算法的效率。

718. 最长重复子数组

给两个整数数组 nums1 和 nums2 ,返回 两个数组中 公共的 、长度最长的子数组的长度 。

示例 1:

输入:nums1 = [1,2,3,2,1], nums2 = [3,2,1,4,7]
输出:3
解释:长度最长的公共子数组是 [3,2,1] 。
示例 2:

输入:nums1 = [0,0,0,0,0], nums2 = [0,0,0,0,0]
输出:5
在这里插入图片描述

方法一:

// 版本一
class Solution {public int findLength(int[] nums1, int[] nums2) {int result = 0;int[][] dp = new int[nums1.length + 1][nums2.length + 1];for (int i = 1; i < nums1.length + 1; i++) {for (int j = 1; j < nums2.length + 1; j++) {if (nums1[i - 1] == nums2[j - 1]) {dp[i][j] = dp[i - 1][j - 1] + 1;result = Math.max(result, dp[i][j]);}}}return result;}
}

这段代码是用于解决「两个数组的最长相同子数组」问题的Java实现。给定两个整数数组 nums1nums2,目标是找到在这两个数组中都出现的最长连续相同子数组的长度。

代码解析

  1. 初始化动态规划数组:

    • 创建一个二维数组 dp,其大小为 (nums1.length + 1) x (nums2.length + 1)dp[i][j] 的值代表以 nums1[i-1]nums2[j-1] 结尾的最长连续相同子数组的长度。额外的一列和一行是为了方便边界条件的处理。
  2. 动态规划迭代:

    • 从数组的第一个有效元素开始迭代,对于每一个元素 nums1[i-1]nums2[j-1](从索引1开始到 nums1.lengthnums2.length)。
    • 如果 nums1[i-1] 等于 nums2[j-1],那么以它们结尾的最长连续相同子数组的长度等于以它们的前一个元素结尾的最长连续相同子数组的长度加1,即 dp[i-1][j-1] + 1
    • 如果两个元素不相等,那么 dp[i][j] 的值为0,因为当前元素不能扩展任何一个连续相同子数组。
  3. 记录结果:

    • 在每次更新 dp[i][j] 后,同时更新全局最大值 result,以确保在整个迭代过程中始终保存最长连续相同子数组的长度。
  4. 返回结果:

    • 最后返回 result,即两个数组中都出现的最长连续相同子数组的长度。

时间复杂度和空间复杂度

  • 时间复杂度: O(m * n),其中 m 和 n 分别是数组 nums1nums2 的长度。这是因为需要遍历两个数组的所有可能的元素组合来计算最长连续相同子数组的长度。
  • 空间复杂度: O(m * n),需要一个大小为 (m + 1) x (n + 1) 的动态规划数组 dp 来存储中间结果。

总结

这段代码通过动态规划的方法,有效地解决了两个数组的最长相同子数组问题。尽管时间复杂度和空间复杂度较高,但在许多实际应用场景中,这样的性能通常是可接受的,特别是当数组大小适中时。如果需要进一步优化空间复杂度,可以考虑使用滚动数组技术,将空间复杂度降低到 O(min(m, n))。

方法二:

// 版本二: 滚动数组
class Solution {public int findLength(int[] nums1, int[] nums2) {int[] dp = new int[nums2.length + 1];int result = 0;for (int i = 1; i <= nums1.length; i++) {for (int j = nums2.length; j > 0; j--) {if (nums1[i - 1] == nums2[j - 1]) {dp[j] = dp[j - 1] + 1;} else {dp[j] = 0;}result = Math.max(result, dp[j]);}}return result;}
}

这段代码是用于解决「两个数组的最长相同子数组」问题的Java实现,特别之处在于它使用了滚动数组技术来优化空间复杂度。给定两个整数数组 nums1nums2,目标是找到在这两个数组中都出现的最长连续相同子数组的长度。

代码解析

  1. 初始化动态规划数组:

    • 创建一个一维数组 dp,其大小为 nums2.length + 1dp[j] 的值代表以 nums1[i-1]nums2[j-1] 结尾的最长连续相同子数组的长度,其中 i 是外层循环的索引。额外的一列是为了方便边界条件的处理。
  2. 动态规划迭代:

    • 外层循环从1到 nums1.length 遍历 nums1 的每个元素。
    • 内层循环从 nums2.length 反向遍历到1,对于每个 nums2[j-1]
    • 如果 nums1[i-1] 等于 nums2[j-1],那么以它们结尾的最长连续相同子数组的长度等于以 nums2[j-2] 结尾的最长连续相同子数组的长度加1,即 dp[j - 1] + 1
    • 如果两个元素不相等,那么 dp[j] 的值为0。
    • 注意内层循环从后向前遍历的原因是为了避免在更新 dp[j] 的时候影响到尚未处理的 dp[j-1] 的值,因为外层循环中的 i 不断增加,而内层循环中的 j 不断减少,这样可以确保 dp[j-1] 总是保留着前一个状态的正确值。
  3. 记录结果:

    • 在每次更新 dp[j] 后,同时更新全局最大值 result,以确保在整个迭代过程中始终保存最长连续相同子数组的长度。
  4. 返回结果:

    • 最后返回 result,即两个数组中都出现的最长连续相同子数组的长度。

时间复杂度和空间复杂度

  • 时间复杂度: O(m * n),其中 m 和 n 分别是数组 nums1nums2 的长度。这是因为需要遍历两个数组的所有可能的元素组合来计算最长连续相同子数组的长度。
  • 空间复杂度: O(n),其中 n 是 nums2 的长度。使用了一维数组 dp 来存储中间结果,相比于版本一的二维数组,空间复杂度显著降低。

总结

这段代码通过滚动数组的动态规划方法,有效地解决了两个数组的最长相同子数组问题,同时在空间复杂度方面进行了优化。滚动数组技术避免了使用额外的大量空间,使得算法在处理大规模数据时更加高效。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/370736.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用握手信号实现跨时钟域数据传输

目录 描述 输入描述&#xff1a; 输出描述&#xff1a; 参考代码 描述 分别编写一个数据发送模块和一个数据接收模块&#xff0c;模块的时钟信号分别为clk_a&#xff0c;clk_b。两个时钟的频率不相同。数据发送模块循环发送0-7&#xff0c;在每个数据传输完成之后&#xf…

Cube-Studio:开源大模型全链路一站式中台

开源项目&#xff0c;欢迎star哦&#xff0c;https://github.com/data-infra/cube-studio 一款真正意义的 LLMOps 框架 LLMOps&#xff08;Large Language Model Operations&#xff09;是一个涵盖了大型语言模型&#xff08;如GPT系列&#xff09;开发、部署、维护和优化的一…

docker部署mycat,连接上面一篇的一主二从mysql

一、docker下载mycat镜像 查看安装结果 这个名称太长&#xff0c;在安装容器时不方便操作&#xff0c;设置标签为mycat docker tag longhronshens/mycat-docker mycat 二、安装容器 先安装一个&#xff0c;主要目的是获得配置文件 docker run -it -d --name mycat -p 8066:…

SpringBoot新手快速入门系列教程7:基于Redis的一个简单存取数据的例子

新手可能有这样的疑问&#xff0c;有了数据库的存取方式&#xff0c;我们为什么还要使用Redis这种缓存数据库读取方式呢&#xff1f; 原因主要有以下几点&#xff1a; 1. 性能提升 数据库查询尤其是复杂查询可能会消耗大量的时间和资源。而Redis是一个内存数据库&#xff0c…

刷题之买股票的最佳时机(leetcode)

买股票的最佳时机 动态规划入门题。 最简单的模拟式解法&#xff1a; class Solution { public:int maxProfit(vector<int>& prices) {//也可以换一种思路&#xff0c;因为只交易一次&#xff0c;那么找出股票最便宜的时候买入&#xff0c;最贵的时候卖出&#xff…

HTML5五十六个民族网站模板源码

文章目录 1.设计来源高山族1.1 登录界面演示1.2 注册界面演示1.3 首页界面演示1.4 中国民族界面演示1.5 关于高山族界面演示1.6 联系我们界面演示 2.效果和源码2.1 动态效果2.2 源代码2.3 源码目录 源码下载 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.ne…

基于TCP的在线词典系统(分阶段实现)

1.功能说明 一共四个功能&#xff1a; 注册 登录 查询单词 查询历史记录 单词和解释保存在文件中&#xff0c;单词和解释只占一行, 一行最多300个字节&#xff0c;单词和解释之间至少有一个空格。 2.功能演示 3、分阶段完成各个功能 3.1 完成服务器和客户端的连接 servic…

Fast R-CNN(论文阅读)

论文名&#xff1a;Fast R-CNN 论文作者&#xff1a;Ross Girshick 期刊/会议名&#xff1a;ICCV 2015 发表时间&#xff1a;2015-9 ​论文地址&#xff1a;https://arxiv.org/pdf/1504.08083 源码&#xff1a;https://github.com/rbgirshick/fast-rcnn 摘要 这篇论文提出了一…

计算机的错误计算(二十三)

摘要 计算机的错误计算&#xff08;二十二&#xff09;阐明&#xff1a;对于结果应该为 0的算式&#xff0c;即使增加计算精度&#xff0c;也得不出0. 针对 &#xff0c;本节给出一种解决方案。 计算机的错误计算&#xff08;十九&#xff09;展示了计算机对 的错误计算&…

JWT(Json Web Token)在.NET Core中的使用

登录成功时生成JWT字符串目录 JWT是什么&#xff1f; JWT的优点&#xff1a; JWT在.NET Core 中的使用 JWT是什么&#xff1f; JWT把登录信息&#xff08;也称作令牌&#xff09;保存在客户端为了防止客户端的数据造假&#xff0c;保存在客户端的令牌经过了签名处理&#xf…

JVM原理(二十):JVM虚拟机内存的三特性详解

1. 原子性、可进行、有序性 1.1. 原子性 Java内存模型围绕着在并发过程中如何处理原子性、可见性和有序性这三个特征来建立的。 Java内存模型来直接保证的原子性变量操作包括read、load、assign、use、store和write这六个。我们大致可以认为&#xff0c;基本数据类型的访问、…

初识Spark

一、简介 官网&#xff1a;Apache Spark™ - Unified Engine for large-scale data analytics Apache的顶级项目&#xff0c;用于大规模数据处理的统一分析引擎。 支持语言&#xff1a;Java、Scala、Python和R (源码为Scala) 高级工具&#xff1a; 1、SparkSQL用于SQL和结构…

云联壹云 FinOps:赋能某车企公有云成本管理与精细化运营

背景 某车企&#xff0c;世界 500 强企业&#xff0c;使用了大量的公有云资源&#xff0c;分布于多家公有云&#xff0c;月消费在千万级别。 业务线多且分散&#xff0c;相关的云消耗由一个核心团队进行管理&#xff0c;本次案例的内容将围绕这些云成本的管理展开的。 需求 …

【LabVIEW学习篇 - 3】:程序结构——顺序结构、for循环、while循环

文章目录 顺序结构案例一案例二 for循环while循环 顺序结构 LabVIEW中的顺序结构是一种常用的控制结构&#xff0c;用于按顺序执行程序的不同部分。顺序结构在程序中按照从左到右的顺序依次执行各个子结构&#xff0c;类似于传统的文本编程语言中的顺序执行。 案例一 案例一…

人工智能在病理组学虚拟染色中的应用|文献精析·24-07-07

小罗碎碎念 本期文献精析&#xff0c;分享的是一篇关于深度学习在虚拟染色技术中应用于组织学研究的综述。 角色姓名单位&#xff08;中文&#xff09;第一作者Leena Latonen东芬兰大学&#xff08;QS-552&#xff09;生物医学研究所通讯作者Pekka Ruusuvuori图尔库大学&#…

日志自动分析-Web---360星图GoaccessALBAnolog

目录 1、Web-360星图(IIS/Apache/Nginx) 2、Web-GoAccess &#xff08;任何自定义日志格式字符串&#xff09; 源码及使用手册 安装goaccess 使用 输出 3-Web-自写脚本&#xff08;任何自定义日志格式字符串&#xff09; 4、Web-机器语言analog&#xff08;任何自定义日…

FastAPI+vue3+Primeflex教学20240706,渲染阶乘案例

子绝父相 相对定位是相对于自己原本的位置定位。 绝对定位&#xff0c;如果父元素设置了相对定位&#xff0c;则相对于父元素进行绝对定位&#xff0c;否则相对于最近的设置了相对定位的元素进行绝对定位&#xff0c;或者相对于根元素进行绝对定位。 定位有四个方向&#xff0…

uniapp 在手机上导出excel

1.创建excelDev.js文件 export default {exportExcel(fileData, documentName excel) {plus.io.requestFileSystem(plus.io.PUBLIC_DOCUMENTS, function(fs) {let rootObj fs.rootlet fullPath rootObj.fullPathconsole.log("开始导出数据")// 创建文件夹rootObj…

2.Python学习:数据类型和变量

1.标识符命名规则 只能由数字、字母、下划线组成不能以数字开头不能是关键字&#xff08;如class等python内部已经使用的标识符&#xff09;区分大小写 查看关键字&#xff1a; print(keyword.kwlist)2.数据类型 2.1常见数据类型 2.1.1Number数值型&#xff1a; 整数int&a…

java集合(2)

目录 一. Map接口下的实现类 1. HashMap 1.1 HashMap常用方法 2. TreeMap 2.1 TreeMap常用方法 3. Hashtable 3.1 Hashtable常用方法 4.Map集合的遍历 4.1 根据键找值 4.2 利用map中的entrySet()方法 二.Collections类 1.Collections类中的常用方法 三. 泛型 1. 为什…