代码随想录-Day53

739. 每日温度

给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。

示例 1:

输入: temperatures = [73,74,75,71,69,72,76,73]
输出: [1,1,4,2,1,1,0,0]
示例 2:

输入: temperatures = [30,40,50,60]
输出: [1,1,1,0]
示例 3:

输入: temperatures = [30,60,90]
输出: [1,1,0]
在这里插入图片描述
在这里插入图片描述

方法一:

class Solution {// 版本 1public int[] dailyTemperatures(int[] temperatures) {int lens=temperatures.length;int []res=new int[lens];/**如果当前遍历的元素 大于栈顶元素,表示 栈顶元素的 右边的最大的元素就是 当前遍历的元素,所以弹出 栈顶元素,并记录如果栈不空的话,还要考虑新的栈顶与当前元素的大小关系否则的话,可以直接入栈。注意,单调栈里 加入的元素是 下标。*/Deque<Integer> stack=new LinkedList<>();stack.push(0);for(int i=1;i<lens;i++){if(temperatures[i]<=temperatures[stack.peek()]){stack.push(i);}else{while(!stack.isEmpty()&&temperatures[i]>temperatures[stack.peek()]){res[stack.peek()]=i-stack.peek();stack.pop();}stack.push(i);}}return  res;}

这段代码是用于解决「每日温度」问题的Java实现,这个问题的目标是给定一个整数数组 temperatures,其中每个元素表示每天的温度,返回一个新的数组,其中每个元素表示直到未来几天才会出现更高的温度的天数。如果不存在未来几天会出现更高的温度,那么该位置的值为0。

代码解析

  1. 初始化:

    • 创建一个与 temperatures 长度相同的数组 res,用于存放结果。
    • 使用一个单调栈 stack,数据结构为 Deque,在Java中通常使用 LinkedList 实现,用于存储下标。
  2. 遍历并维护单调栈:

    • 遍历 temperatures 数组中的每个元素。
    • 对于当前遍历到的元素 temperatures[i]
      • 如果该元素小于等于栈顶元素对应的温度,即 temperatures[i] <= temperatures[stack.peek()],则将当前下标 i 入栈。
      • 否则,进入一个while循环:
        • 当栈不为空且当前元素大于栈顶元素对应的温度时,弹出栈顶元素,并计算栈顶元素下标到当前下标 i 的距离,即 i - stack.peek(),并将这个距离存入结果数组 res 的对应位置。
        • 继续循环,直到栈为空或当前元素不大于栈顶元素对应的温度。
      • 最后,将当前下标 i 入栈。
  3. 返回结果:

    • 返回结果数组 res,其中每个元素表示直到未来几天才会出现更高的温度的天数。

时间复杂度和空间复杂度

  • 时间复杂度: O(n),其中 n 是数组 temperatures 的长度。每个元素至多被放入和弹出栈一次。
  • 空间复杂度: O(n),需要一个大小为 n 的结果数组 res 和一个单调栈 stack

总结

这段代码通过使用单调栈的策略,有效地解决了每日温度问题,能够快速找到每个温度元素右边第一个比它大的温度元素的位置。单调栈是一种常用的数据结构,在处理与单调性相关的数组或序列问题时非常有用,例如寻找最近的更大或更小的元素、股票价格波动分析等。在实际应用中,掌握单调栈的原理和使用方法能够帮助解决一系列经典问题,提高代码效率。

方法二:

    //--------这 是一条分界线// 版本 2class Solution {public int[] dailyTemperatures(int[] temperatures) {int lens=temperatures.length;int []res=new int[lens];Deque<Integer> stack=new LinkedList<>();for(int i=0;i<lens;i++){while(!stack.isEmpty()&&temperatures[i]>temperatures[stack.peek()]){res[stack.peek()]=i-stack.peek();stack.pop();}stack.push(i);}return  res;}

这段代码同样是用于解决「每日温度」问题的Java实现,其目标与前一版本相同,即给定一个整数数组 temperatures,返回一个新的数组,其中每个元素表示直到未来几天才会出现更高的温度的天数。如果不存在未来几天会出现更高的温度,那么该位置的值为0。

代码解析

  1. 初始化:

    • 创建一个与 temperatures 长度相同的数组 res,用于存放结果。
    • 使用一个单调栈 stack,数据结构为 Deque,在Java中通常使用 LinkedList 实现,用于存储下标。
  2. 遍历并维护单调栈:

    • 遍历 temperatures 数组中的每个元素。
    • 对于当前遍历到的元素 temperatures[i]
      • 进入一个while循环,只要栈不为空且当前元素大于栈顶元素对应的温度,执行以下操作:
        • 计算栈顶元素下标到当前下标 i 的距离,即 i - stack.peek(),并将这个距离存入结果数组 res 的对应位置。
        • 弹出栈顶元素。
      • 将当前下标 i 入栈。
  3. 返回结果:

    • 返回结果数组 res,其中每个元素表示直到未来几天才会出现更高的温度的天数。

时间复杂度和空间复杂度

  • 时间复杂度: O(n),其中 n 是数组 temperatures 的长度。每个元素至多被放入和弹出栈一次。
  • 空间复杂度: O(n),需要一个大小为 n 的结果数组 res 和一个单调栈 stack

版本对比

相比于版本1,版本2的代码在遍历过程中直接从头开始,简化了代码逻辑,将入栈操作放在了while循环的外部。这种写法同样有效,且逻辑上更清晰,因为它避免了不必要的条件判断(如版本1中的 temperatures[i] <= temperatures[stack.peek()])。每次遍历到新元素时,代码首先处理栈中所有比当前元素小的元素,然后将当前元素入栈,这一过程确保了栈内的元素始终按温度递减的顺序排列,即形成了一个单调递减栈。

总结

通过使用单调栈的策略,版本2的代码同样有效地解决了每日温度问题。这种实现方式不仅保持了良好的时间复杂度和空间复杂度,而且在代码结构上更为精简和直观,有助于提高代码的可读性和维护性。单调栈在处理与单调性相关的数组或序列问题时是一种非常有用的工具,熟练掌握其使用方法对于解决一系列经典问题具有重要意义。

496. 下一个更大元素 I

nums1 中数字 x 的 下一个更大元素 是指 x 在 nums2 中对应位置 右侧 的 第一个 比 x 大的元素。

给你两个 没有重复元素 的数组 nums1 和 nums2 ,下标从 0 开始计数,其中nums1 是 nums2 的子集。

对于每个 0 <= i < nums1.length ,找出满足 nums1[i] == nums2[j] 的下标 j ,并且在 nums2 确定 nums2[j] 的 下一个更大元素 。如果不存在下一个更大元素,那么本次查询的答案是 -1 。

返回一个长度为 nums1.length 的数组 ans 作为答案,满足 ans[i] 是如上所述的 下一个更大元素 。

示例 1:

输入:nums1 = [4,1,2], nums2 = [1,3,4,2].
输出:[-1,3,-1]
解释:nums1 中每个值的下一个更大元素如下所述:

  • 4 ,用加粗斜体标识,nums2 = [1,3,4,2]。不存在下一个更大元素,所以答案是 -1 。
  • 1 ,用加粗斜体标识,nums2 = [1,3,4,2]。下一个更大元素是 3 。
  • 2 ,用加粗斜体标识,nums2 = [1,3,4,2]。不存在下一个更大元素,所以答案是 -1 。
    示例 2:

输入:nums1 = [2,4], nums2 = [1,2,3,4].
输出:[3,-1]
解释:nums1 中每个值的下一个更大元素如下所述:

  • 2 ,用加粗斜体标识,nums2 = [1,2,3,4]。下一个更大元素是 3 。
  • 4 ,用加粗斜体标识,nums2 = [1,2,3,4]。不存在下一个更大元素,所以答案是 -1 。

方法一:

class Solution {public int[] nextGreaterElement(int[] nums1, int[] nums2) {Stack<Integer> temp = new Stack<>();int[] res = new int[nums1.length];Arrays.fill(res,-1);HashMap<Integer, Integer> hashMap = new HashMap<>();for (int i = 0 ; i< nums1.length ; i++){hashMap.put(nums1[i],i);}temp.add(0);for (int i = 1; i < nums2.length; i++) {if (nums2[i] <= nums2[temp.peek()]) {temp.add(i);} else {while (!temp.isEmpty() && nums2[temp.peek()] < nums2[i]) {if (hashMap.containsKey(nums2[temp.peek()])){Integer index = hashMap.get(nums2[temp.peek()]);res[index] = nums2[i];}temp.pop();}temp.add(i);}}return res;}
}

这段代码是用于解决「下一个更大元素 I」问题的Java实现。给定两个没有重复元素的数组 nums1nums2,其中 nums1nums2 的一个子集,目标是对于 nums1 中的每一个元素,找到在 nums2 中下一个更大的元素的值。如果没有这样的元素,那么输出 -1。

代码解析

  1. 初始化:

    • 创建一个单调栈 temp,数据结构为 Stack,用于存储 nums2 中元素的下标。
    • 创建一个结果数组 res,初始化所有元素为 -1,长度与 nums1 相同。
    • 创建一个哈希映射 hashMap,用于存储 nums1 中元素及其在 res 数组中的下标,以便快速查找和更新结果。
  2. 遍历并维护单调栈:

    • 遍历 nums2 数组中的每个元素。
    • 对于当前遍历到的元素 nums2[i]
      • 如果该元素小于等于栈顶元素对应的值,即 nums2[i] <= nums2[temp.peek()],则将当前下标 i 入栈。
      • 否则,进入一个while循环:
        • 当栈不为空且当前元素大于栈顶元素对应的值时,检查栈顶元素是否在 nums1 中,如果是,则获取该元素在 res 中的下标,并将当前元素的值赋给 res 的对应位置。
        • 继续循环,直到栈为空或当前元素不大于栈顶元素对应的值。
      • 最后,将当前下标 i 入栈。
  3. 返回结果:

    • 返回结果数组 res,其中每个元素表示 nums1 中对应元素在 nums2 中的下一个更大元素的值,若不存在则为 -1

时间复杂度和空间复杂度

  • 时间复杂度: O(m + n),其中 m 和 n 分别是数组 nums1nums2 的长度。每个元素至多被放入和弹出栈一次,哈希表的查找操作平均时间复杂度为 O(1)。
  • 空间复杂度: O(n),需要一个大小为 n 的单调栈 temp 和一个哈希映射 hashMap,以及一个结果数组 res

总结

这段代码通过使用单调栈和哈希映射的策略,有效地解决了下一个更大元素问题,能够快速找到 nums1 中每个元素在 nums2 中下一个更大元素的值。单调栈是一种常用的数据结构,在处理与单调性相关的数组或序列问题时非常有用,结合哈希映射能够进一步提高查找效率。在实际应用中,掌握这些数据结构和算法原理能够帮助解决一系列经典问题,提高代码效率和性能。

方法二:

// 版本2
class Solution {public int[] nextGreaterElement(int[] nums1, int[] nums2) {HashMap<Integer, Integer> map = new HashMap<>();for (int i = 0; i < nums1.length; i++) {map.put(nums1[i], i);}int[] res = new int[nums1.length];Stack<Integer> stack = new Stack<>();Arrays.fill(res, -1);for (int i = 0; i < nums2.length; i++) {while (!stack.isEmpty() && nums2[stack.peek()] < nums2[i]) {int pre = nums2[stack.pop()];if (map.containsKey(pre)) {res[map.get(pre)] = nums2[i];}}stack.push(i);}return res;}
}

这段代码是用于解决「下一个更大元素 I」问题的另一种Java实现,其实现思路与之前解析的版本相似,但代码结构和变量命名有所不同,旨在解决给定两个没有重复元素的数组 nums1nums2,其中 nums1nums2 的一个子集,对于 nums1 中的每一个元素,找到在 nums2 中下一个更大的元素的值。如果没有这样的元素,那么输出 -1。

代码解析

  1. 初始化:

    • 创建一个哈希映射 map,用于存储 nums1 中元素及其在 nums1 中的下标,以便快速查找和更新结果。
    • 创建一个结果数组 res,初始化所有元素为 -1,长度与 nums1 相同。
    • 创建一个单调栈 stack,数据结构为 Stack,用于存储 nums2 中元素的下标。
  2. 构建哈希映射:

    • 遍历 nums1 数组,将每个元素及其在 nums1 中的下标存储在 map 中。
  3. 遍历并维护单调栈:

    • 遍历 nums2 数组中的每个元素。
    • 对于当前遍历到的元素 nums2[i]
      • 如果栈不为空并且栈顶元素对应的值小于当前元素,即 nums2[stack.peek()] < nums2[i],则:
        • 弹出栈顶元素,并获取其值。
        • 如果弹出的元素在 nums1 中,即 map 中存在该元素,那么在 res 数组的对应位置填入当前元素的值。
      • 继续这个过程,直到栈为空或者栈顶元素对应的值不再小于当前元素。
      • 最后,将当前下标 i 入栈。
  4. 返回结果:

    • 返回结果数组 res,其中每个元素表示 nums1 中对应元素在 nums2 中的下一个更大元素的值,若不存在则为 -1

时间复杂度和空间复杂度

  • 时间复杂度: O(m + n),其中 m 和 n 分别是数组 nums1nums2 的长度。每个元素至多被放入和弹出栈一次,哈希表的查找操作平均时间复杂度为 O(1)。
  • 空间复杂度: O(n),需要一个大小为 n 的单调栈 stack 和一个哈希映射 map,以及一个结果数组 res

总结

这段代码同样通过使用单调栈和哈希映射的策略,有效地解决了下一个更大元素问题,能够快速找到 nums1 中每个元素在 nums2 中下一个更大元素的值。代码结构清晰,逻辑直观,是解决这类问题的一种典型且高效的方法。掌握这些数据结构和算法原理能够帮助解决一系列经典问题,提高代码效率和性能。在实际应用中,根据具体需求和场景选择合适的数据结构和算法是非常重要的。

503. 下一个更大元素 II

给定一个循环数组 nums ( nums[nums.length - 1] 的下一个元素是 nums[0] ),返回 nums 中每个元素的 下一个更大元素 。

数字 x 的 下一个更大的元素 是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。如果不存在,则输出 -1 。

示例 1:

输入: nums = [1,2,1]
输出: [2,-1,2]
解释: 第一个 1 的下一个更大的数是 2;
数字 2 找不到下一个更大的数;
第二个 1 的下一个最大的数需要循环搜索,结果也是 2。
示例 2:

输入: nums = [1,2,3,4,3]
输出: [2,3,4,-1,4]

class Solution {public int[] nextGreaterElements(int[] nums) {//边界判断if(nums == null || nums.length <= 1) {return new int[]{-1};}int size = nums.length;int[] result = new int[size];//存放结果Arrays.fill(result,-1);//默认全部初始化为-1Stack<Integer> st= new Stack<>();//栈中存放的是nums中的元素下标for(int i = 0; i < 2*size; i++) {while(!st.empty() && nums[i % size] > nums[st.peek()]) {result[st.peek()] = nums[i % size];//更新resultst.pop();//弹出栈顶}st.push(i % size);}return result;}
}

这段代码是用于解决「下一个更大元素 II」问题的Java实现。给定一个循环数组 nums(数组中元素的下一个元素是数组的第一个元素),目标是返回一个数组,其中每个元素是原数组中下一个更大元素的值,如果没有更大的元素,则对应位置的值为 -1。

代码解析

  1. 初始化:

    • 创建一个单调栈 st,数据结构为 Stack,用于存储 nums 中元素的下标。
    • 创建一个结果数组 result,初始化所有元素为 -1,长度与 nums 相同。
  2. 遍历并维护单调栈:

    • 遍历 nums 数组两次,即遍历 2 * nums 的长度(考虑到循环数组的性质),使用模运算 i % size 来获取实际数组下标。
    • 对于当前遍历到的元素 nums[i % size]
      • 如果栈不为空并且栈顶元素对应的值小于当前元素,即 nums[st.peek()] < nums[i % size],则:
        • 更新 result 数组中对应位置的值为当前元素的值。
        • 弹出栈顶元素。
      • 继续这个过程,直到栈为空或者栈顶元素对应的值不再小于当前元素。
      • 最后,将当前下标 i % size 入栈。
  3. 返回结果:

    • 返回结果数组 result,其中每个元素表示原数组 nums 中对应元素的下一个更大元素的值,若不存在则为 -1

时间复杂度和空间复杂度

  • 时间复杂度: O(n),其中 n 是数组 nums 的长度。虽然代码中遍历了 2 * nums 的长度,但是每个元素至多被放入和弹出栈一次,因此总的时间复杂度为 O(n)。
  • 空间复杂度: O(n),需要一个大小为 n 的单调栈 st 和一个结果数组 result

总结

这段代码通过使用单调栈的策略,有效地解决了下一个更大元素 II 问题,能够处理循环数组并找到每个元素的下一个更大元素的值。代码逻辑清晰,通过两次遍历数组并使用模运算处理循环数组的特点,实现了高效的解题策略。单调栈在处理这类问题时表现出了强大的能力,能够快速找到特定条件下下一个更大的元素,是解决此类问题的经典方法。在实际应用中,了解和掌握单调栈的使用方法对于解决与单调性相关的数组或序列问题具有重要意义。

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

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

相关文章

【Linux】目录的相关命令——cd,pwd,mkdir,rmdir

1.相对路径与绝对路径 在开始目录的切换之前&#xff0c;你必须要先了解一下所谓的路径&#xff08;PATH)&#xff0c;有趣的是&#xff1a;什么是相对路 与绝对路径&#xff1f; 绝对路径&#xff1a;路径的写法“一定由根目录/写起”&#xff0c;例如&#xff1a;/usr/shar…

Java版Flink使用指南——定制RabbitMQ数据源的序列化器

大纲 新建工程新增依赖数据对象序列化器接入数据源 测试修改Slot个数打包、提交、运行 工程代码 在《Java版Flink使用指南——从RabbitMQ中队列中接入消息流》一文中&#xff0c;我们从RabbitMQ队列中读取了字符串型数据。如果我们希望读取的数据被自动化转换为一个对象&#x…

智慧科技照亮水利未来:深入剖析智慧水利解决方案如何助力水利行业实现高效、精准、可持续的管理

目录 一、智慧水利的概念与内涵 二、智慧水利解决方案的核心要素 1. 物联网技术&#xff1a;构建全面感知网络 2. 大数据与云计算&#xff1a;实现数据高效处理与存储 3. GIS与三维可视化&#xff1a;提升决策支持能力 4. 人工智能与机器学习&#xff1a;驱动决策智能化 …

LibreOffice的国内镜像安装地址和node.js国内快速下载网站

文章目录 1、LibreOffice1.1、LibreOffice在application-conf.yml中的配置2、node.js 1、LibreOffice 国内镜像包网址&#xff1a;https://mirrors.cloud.tencent.com/libreoffice/libreoffice/ 1.1、LibreOffice在application-conf.yml中的配置 jodconverter:local:enable…

Java面试八股之MySQL中int(10)和bigint(10)能存储读的数据大小一样吗

MySQL中int(10)和bigint(10)能存储读的数据大小一样吗 在MySQL中&#xff0c;int(10)和bigint(10)的数据存储能力并不相同&#xff0c;尽管括号内的数字&#xff08;如10&#xff09;看起来似乎暗示着某种关联&#xff0c;但实际上这个数字代表的是显示宽度&#xff0c;而不是…

vue学习day03-指令修饰符、v-bind对于样式控制的增强、v-model应用于其他表单元素

7、指令修饰符 &#xff08;1&#xff09;概念&#xff1a; 通过“.”指明一些指令后缀&#xff0c;不同后缀封装了不同的处理操作->简化代码 &#xff08;2&#xff09;按键修饰符 keyup.enter->键盘回车监听 &#xff08;3&#xff09;v-model修饰符 v-model.tri…

vue + element ui 实现侧边栏导航栏折叠收起

首页布局如下 要求点击按钮,将侧边栏收缩, 通过 row 和 col 组件&#xff0c;并通过 col 组件的 span 属性我们就可以自由地组合布局。 折叠前 折叠后 <template><div class"app-layout" :class"{ collapse: app.isFold }"><div class&…

Onekey正版steam分流下载工具

今天给大家介绍的是一款下载steam游戏的工具。Onekey工具&#xff0c;是一款游戏下载器&#xff0c;可以下载steam正版分流游戏。下载正版分流的网站很多&#xff0c;但是都是网盘或者迅雷下载&#xff0c;或者游戏盒子下载&#xff0c;速度都很慢。这款软件是用steam下载的&am…

Flask项目搭建及部署 —— Python

flask搭建及部署 pip 19.2.3 python 3.7.5 Flask 1.1.1 Flask-SQLAlchemy 2.4.1 Pika 1.1.0 Redis 3.3.11 flask-wtf 0.14.2 1、创建flask项目&#xff1a; 创建完成后整个项目结构树&#xff1a; app.py: 项⽬管理⽂件&#xff0c;通过它管理项⽬。 static: 存放静态…

2021版本的idea热部署的详细步骤

背景&#xff1a;我是自己用的是2021版本的idea,然后发现跟2023版本的热部署不太一样&#xff0c;所以&#xff0c;今天自己出一期这样的文章吧&#xff01;&#xff01;&#xff01;其他人配置的时候根据自己的情况&#xff0c;来阅读吧&#xff01; 第一步&#xff1a;方式一…

MyBatis是如何分页的及原理

MyBatis 是一种持久层框架&#xff0c;支持通过配置文件和注解将 SQL 映射为 Java 对象。在实际开发中&#xff0c;查询数据时经常需要进行分页处理。 MyBatis 也提供了支持分页的方案&#xff0c;其主要思路是使用 Limit 偏移量和限制个数&#xff0c;来获取指定数量的数据。下…

音视频入门基础:H.264专题(10)——FFmpeg源码中,存放SPS属性的结构体和解码SPS的函数分析

一、引言 FFmpeg源码对AnnexB包装的H.264码流解码过程中&#xff0c;通过ff_h2645_extract_rbsp函数拿到该H.264码流中的某个NALU的NALU Header RBSP后&#xff08;具体可以参考&#xff1a;《FFmpeg源码&#xff1a;ff_h2645_extract_rbsp函数分析》&#xff09;&#xff0c…

【沐风老师】3DMAX建筑体块生成插件BuildingBlocks使用方法详解

BuildingBlocks建筑体块生成插件使用方法详解 听说你还在手动建配景楼&#xff1f;有了BuildingBlocks这个插件&#xff0c;一分钟搞定喔&#xff01; 3DMAX建筑体块生成插件BuildingBlocks&#xff0c;用于快速自定义街道及生成配景楼区块。 【适用版本】 3dMax2019及更高版…

分布式I/O从站的认知

为什么需要分布式I/O从站&#xff1f; 当PLC与控制机构距离过远时&#xff0c;远距离会带来信号干扰&#xff0c;分布式I/O从站只需要一个网络线缆连接。 ET200分布式I/O从站家族 体积紧凑、功能强大。 ET200SP ET200M ET200S ET200iSP ET200 AL ET200pro ET200 eco PN 通讯协议…

DSSM双塔特征交互

传统的DSSM双塔无法在早期进行user和item侧的特征交互&#xff0c;这在一定程度上降低了模型性能。我们想要对双塔模型进行细粒度的特征交互&#xff0c;同时又不失双塔模型离线建向量索引的解耦性。下面介绍两篇这方面的工作。 美团-Dual Augmented Two-tower 在user和item的特…

1. CSS Grid 网格布局教程

CSS Grid 网格布局教程 一、概述 网格布局&#xff08;Grid&#xff09;是最强大的 CSS 布局方案。 它将网页划分成一个个网格&#xff0c;可以任意组合不同的网格&#xff0c;做出各种各样的布局。以前&#xff0c;只能通过复杂的 CSS 框架达到的效果&#xff0c;现在浏览器…

Scrapy crawl spider 停止工作

Scrapy是一个用于爬取网站数据的流行框架&#xff0c;有时爬虫可能会停止工作&#xff0c;这通常是由多种原因引起的。以下是一些常见问题及其解决方法&#xff1a; 1、问题背景 用户在使用 Scrapy 0.16.2 版本进行网络爬取时遇到问题&#xff0c;具体表现为爬虫在运行一段时间…

Android 开发中 C++ 和Java 日志调试

在 C 中添加堆栈日志 先在 Android.bp 中 添加 ‘libutilscallstack’ shared_libs:["liblog"," libutilscallstack"]在想要打印堆栈的代码中添加 #include <utils/CallStack.h> using android::CallStack;// 在函数中添加 int VisualizerLib_Crea…

生物素结合金纳米粒子(Bt@Au-NPs ) biotin-conjugated Au-NPs

一、定义与特点 定义&#xff1a;生物素结合金纳米粒子&#xff0c;简称BtAu-NPs或biotin-conjugated Au-NPs&#xff0c;是指通过特定的化学反应或物理方法将生物素修饰到金纳米粒子表面&#xff0c;形成稳定的纳米复合材料。 特点&#xff1a; 高稳定性&#xff1a;生物素的修…

【VUE基础】VUE3第七节—Vue Router路由基础

Vue Router 是 Vue 官方的客户端路由解决方案。 客户端路由的作用是在单页应用 (SPA) 中将浏览器的 URL 和用户看到的内容绑定起来。当用户在应用中浏览不同页面时&#xff0c;URL 会随之更新&#xff0c;但页面不需要从服务器重新加载。 Vue Router 基于 Vue 的组件系统构建&…