数组还可以这样用!常用但不为人知的应用场景

news2024/11/24 14:11:30

哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云;欢迎大家常来逛逛

  今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。

  我是一名后端开发爱好者,工作日常接触到最多的就是Java语言啦,所以我都尽量抽业余时间把自己所学到所会的,通过文章的形式进行输出,希望以这种方式帮助到更多的初学者或者想入门的小伙伴们,同时也能对自己的技术进行沉淀,加以复盘,查缺补漏。

小伙伴们在批阅的过程中,如果觉得文章不错,欢迎点赞、收藏、关注哦。三连即是对作者我写作道路上最好的鼓励与支持!

前言

  在Java开发中,数组几乎是无处不在的数据结构。在处理大量数据时,数组可以优化算法和提高性能。但是,除了简单的数组操作之外,还有很多有趣且实用的应用场景,这些场景在实际工作中也很常见,但并不为人所知。

  本文将介绍一些常用但不为人知的数组应用场景,希望能为开发者提供一些帮助。

摘要

  本文将介绍数组的一些常用但不为人知的应用场景,包括二维数组的应用,数组的旋转、查找、去重等操作,以及在算法中使用数组等场景。还将对这些应用场景的优缺点进行分析,并提供相应的类代码和测试用例。

正文

简介

  数组在Java中是一种基本的数据结构,可以表示连续的内存空间。它可以用来存储一组相同数据类型的元素。Java中的数组可以是一维或多维的,而且数组的大小一旦确定就无法更改。

  本文将介绍数组的几种常用但不为人知的应用场景,包括二维数组的应用,数组的旋转、查找、去重等操作,以及在算法中使用数组等场景。并且将分析这些应用场景的优缺点,并提供相应的示例代码和测试用例。

源代码解析

二维数组的应用

  二维数组是由多个一维数组组成的,可以理解为一个表格,行和列分别对应数组的第一维和第二维。它在Java中的应用非常广泛,尤其在矩阵计算、图像处理、游戏等方面。

二维数组的定义和初始化

  在Java中,二维数组的定义和初始化方式如下:

int[][] array = new int[3][4];

  这表示创建一个3行4列的二维数组。我们也可以使用另一种方式初始化二维数组:

int[][] array = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};

  这种方式可以直接初始化二维数组的每个元素。

二维数组的遍历

  二维数组的遍历方式通常有两种:

  • 使用嵌套循环遍历每一个元素。
  • 使用Java8的流和Lambda表达式来遍历每一个元素。

  下面是使用嵌套循环遍历二维数组:

for (int i = 0; i < array.length; i++) {
    for (int j = 0; j < array[i].length; j++) {
        System.out.print(array[i][j] + " ");
    }
    System.out.println();
}

  这个例子中,我们首先使用一个外层循环来遍历每一行,然后在内层循环中遍历每一列。

  下面是使用Java8流和Lambda表达式来遍历二维数组:

Arrays.stream(array).forEach(row -> {
    Arrays.stream(row).forEach(num -> System.out.print(num + " "));
    System.out.println();
});

  这个例子中,我们首先使用Arrays.stream()方法将二维数组转换成一个流,然后使用forEach()方法和Lambda表达式来遍历每个元素,和前面的方法相比,这个方法更简洁。

数组的旋转、查找、去重等操作

数组的旋转

  数组的旋转是将数组中的元素按照某个规律进行旋转。在实际工作中,数组的旋转操作常用于图像处理、游戏等方面。

  下面是一个将二维数组旋转90度的例子:

public static int[][] rotate(int[][] matrix) {
    int n = matrix.length;
    int[][] result = new int[n][n];
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            result[j][n - i - 1] = matrix[i][j];
        }
    }
    return result;
}

  这个方法中,我们使用一个新的二维数组来存储旋转后的结果。我们使用两个循环遍历原始矩阵中的元素,并将其存储到旋转后的新矩阵中。

代码分析:

  该代码定义了一个名为rotate的静态方法,接受一个二维整型数组matrix作为参数,返回一个旋转后的二维整型数组。

  接下来,使用变量n记录矩阵的边长,即矩阵的行数和列数。创建一个新的二维整型数组result,其行数和列数都为n。结果数组用于存储旋转后的矩阵。

  接着,使用两个循环遍历原始矩阵matrix中的每个元素。通过将原始矩阵中第i行第j列的元素赋值到结果矩阵中第j行第n-i-1列的位置,来将原始矩阵顺时针旋转90度。这个旋转公式可以这样理解:结果矩阵中的每一行都等于原始矩阵中的每一列,但是顺序被反过来,且行列索引值有所变化。

  最后,返回旋转后的矩阵result。

数组的查找

  数组的查找是在一个数组中查找一个特定的元素。在实际工作中,数组的查找操作经常用于数据检索、搜索等方面。

  下面是一个使用二分查找来查找一个元素在一个已排序的数组中的位置的例子:

public static int binarySearch(int[] sortedArray, int key) {
    int low = 0;
    int high = sortedArray.length - 1;

    while (low <= high) {
        int mid = (low + high) / 2;
        if (sortedArray[mid] < key) {
            low = mid + 1;
        } else if (sortedArray[mid] > key) {
            high = mid - 1;
        } else {
            return mid;
        }
    }
    return -1;
}

  这个方法中,我们使用一个while循环进行二分查找。在每一次循环中,我们将要查找的元素和数组中间元素进行比较,然后根据比较结果将要查找的范围缩小一半。

代码分析:

  这段代码是一个二分查找算法,接收一个已排序的整数数组和一个关键字,返回关键字在数组中的索引值(如果存在)或者-1(如果不存在)。

  首先,定义两个变量low和high,分别代表数组的起始和终止索引。

  然后,使用一个while循环来不断缩小搜索范围,直到找到关键字或者确定关键字不存在。

  在每次循环中,算出数组中间元素的索引mid,并与关键字进行比较。如果中间元素小于关键字,则将搜索范围缩小到右半部分,即将low设为mid+1;如果中间元素大于关键字,则将搜索范围缩小到左半部分,即将high设为mid-1;如果中间元素等于关键字,则找到关键字,返回mid。

  如果循环结束后仍然没有找到关键字,则说明关键字不存在,返回-1。

  总体来说,这段代码的时间复杂度为O(log n),可以快速找到数组中的元素。

数组的去重

  数组的去重是将一个数组中重复的元素去掉,只保留不重复的元素。在实际工作中,数组的去重操作常用于数据清洗、统计等方面。

  下面是一个将数组中重复元素去掉的例子:

public static int[] removeDuplicates(int[] array) {
    if (array == null || array.length == 0) {
        return array;
    }
    int len = array.length;
    Arrays.sort(array);
    int j = 0;
    for (int i = 0; i < len - 1; i++) {
        if (array[i] != array[i + 1]) {
            array[j++] = array[i];
        }
    }
    array[j++] = array[len - 1];
    return Arrays.copyOf(array, j);
}

  这个方法中,我们首先对数组进行排序,然后使用一个循环遍历数组中的元素,如果当前元素和下一个元素不相同,则将当前元素存储到一个新数组中。最后,我们使用Arrays.copyOf()方法返回一个新的数组,长度为j。

代码分析:

  这段代码是一个静态方法,接收一个整数数组作为参数,并返回一个去重后的整数数组。

  首先,代码进行了一些边界判断,如果传入的数组为 null 或长度为 0,则直接返回原数组。

  然后对数组进行排序,这样相同的元素就会排列在一起。

  紧接着,定义了一个变量 j 来记录去重后的数组中有效元素的个数,初始值为 0。

  接下来使用 for 循环遍历数组,如果当前元素和后一个元素不相等,则将当前元素添加到去重后的数组中,并将变量 j 加 1。

  最后,将数组的最后一个元素添加到去重后的数组中,并返回数组的前 j 个元素,即为去重后的数组。

  可以看出,这段代码的时间复杂度为 O(nlogn),其中 n 为数组的长度。因为要进行排序操作,虽然去重操作只需要一次遍历,但排序的复杂度占据了主要部分。

在算法中使用数组

  在算法中,数组通常用于优化算法和提高性能。例如,我们可以使用一个数组来记录某个数出现的次数,然后快速找到出现次数最多的数。

  下面是一个找出数组中出现次数最多的元素的例子:

public static int findMostFrequentElement(int[] elements) {
    int n = elements.length;
    Map<Integer, Integer> count = new HashMap<>();

    for (int i = 0; i < n; i++) {
        if (!count.containsKey(elements[i])) {
            count.put(elements[i], 0);
        }
        count.put(elements[i], count.get(elements[i]) + 1);
    }

    int mostFrequentElement = -1, maxCount = -1;
    for (Map.Entry<Integer, Integer> entry : count.entrySet()) {
        if (entry.getValue() > maxCount) {
            mostFrequentElement = entry.getKey();
            maxCount = entry.getValue();
        }
    }

    return mostFrequentElement;
}

  这个方法中,我们首先使用一个Map来记录每个元素出现的次数,然后使用一个循环遍历数组中的元素,并将其存储到Map中。最后,我们使用另一个循环

代码分析:

  这个方法接收一个整型数组作为参数,然后返回该数组中出现次数最多的元素。

  方法首先创建一个 HashMap,并迭代元素数组中的每个元素,对每个元素进行计数。如果元素在 HashMap 中不存在,就将该元素加入到 HashMap 中并设置为出现次数为零。然后将该元素的出现次数加一。

  接下来,方法遍历 HashMap 中的每个元素,并跟踪出现次数最多的元素和它的出现次数。如果当前元素的出现次数比已知最大出现次数要大,则将最大出现次数更新为当前元素的出现次数,并将最频繁出现的元素设置为当前元素。

  最后,该方法返回最频繁出现的元素。如果该数组中所有元素都只出现了一次,则返回 -1。

数组的常用但不为人知的应用场景

1. 二维数组的转置

  在实际工作中,我们经常需要对矩阵进行转置。对于一个二维数组,转置指的是将其行和列对调。

  下面是一个二维数组转置的例子:

public static int[][] transpose(int[][] matrix) {
    int n = matrix.length;
    int m = matrix[0].length;
    int[][] result = new int[m][n];
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < n; j++) {
            result[i][j] = matrix[j][i];
        }
    }
    return result;
}

代码分析:

  这段代码实现了矩阵的转置操作,即将矩阵的行列互换。具体分析如下:

  1. 首先,该方法接收一个二维数组matrix作为参数,其中n表示matrix数组的行数,m表示matrix数组的列数。

  2. 接着,定义一个新的二维数组result,其行数是原矩阵的列数,列数是原矩阵的行数,这里的目的是为了存储转置后的矩阵。

  3. 然后,通过嵌套的for循环遍历原矩阵,将原矩阵的第i行第j列的元素赋值给新矩阵的第j行第i列的元素,从而完成矩阵的转置操作,即将矩阵的行列互换。

  4. 最后,返回转置后的矩阵result。

总体来说,这段代码实现了简单的矩阵转置算法,具有较高的可读性和易于理解的特点。

2. 数组的旋转

  数组的旋转是指将一个数组中的元素按照某个规律进行旋转。在实际工作中,数组的旋转操作常用于图像处理、游戏等方面。

下面是一个将数组旋转k次的例子:

public static void rotate(int[] nums, int k) {
    int n = nums.length;
    k = k % n;
    reverse(nums, 0, n - 1);
    reverse(nums, 0, k - 1);
    reverse(nums, k, n - 1);
}

private static void reverse(int[] nums, int start, int end) {
    while (start < end) {
        int temp = nums[start];
        nums[start] = nums[end];
        nums[end] = temp;
        start++;
        end--;
    }
}

  这个例子中,我们首先计算出旋转的次数k。然后,我们首先将整个数组反转,然后再将前k个元素反转,最后再将剩余的元素反转。

代码分析:

  这段代码实现了将长度为n的整数数组nums中的元素向右旋转k个位置。具体做法是:先将整个数组反转,再将前k个元素反转,最后将剩下的n-k个元素反转。这样做的时间复杂度为O(n),空间复杂度为O(1)。

  例如,给定数组nums=[1,2,3,4,5,6,7],旋转3个位置,则按照上述算法进行操作:

将整个数组反转,得到[7,6,5,4,3,2,1];
将前3个元素反转,得到[5,6,7,4,3,2,1];
将剩下的4个元素反转,得到[5,6,7,1,2,3,4];
最终得到的数组就是旋转后的结果。

  这段代码中用到了一个双指针的技巧,即用两个指针start和end分别指向数组的开头和结尾,然后不停地交换它们所指向的元素,直到它们相遇为止,这样就可以实现数组反转的功能。

3. 数组的查找

  数组的查找是指在一个数组中查找一个特定的元素。在实际工作中,数组的查找操作经常用于数据检索、搜索等方面。

下面是一个使用二分查找来查找一个元素在一个已排序的数组中的位置的例子:

public static int binarySearch(int[] sortedArray, int key) {
    int low = 0;
    int high = sortedArray.length - 1;

    while (low <= high) {
        int mid = (low + high) / 2;
        if (sortedArray[mid] < key) {
            low = mid + 1;
        } else if (sortedArray[mid] > key) {
            high = mid - 1;
        } else {
            return mid;
        }
    }
    return -1;
}

代码分析:

  这是一个二分查找算法的实现,接受一个已排序的整数数组和一个要查找的元素,返回该元素在数组中的索引。

  算法的核心思想是将数组取中间位置的元素与要查找的元素进行比较,如果中间元素小于要查找的元素,则在中间元素的右半部分继续查找,反之则在左半部分继续查找,直到找到要查找的元素或者数组被遍历完毕。

  在每次查找过程中,都会将数组的范围缩小一半,因此最差情况下的时间复杂度为O(log n)。

  如果要查找的元素不存在于数组中,则返回-1。

4. 数组的去重

  数组的去重是将一个数组中重复的元素去掉,只保留不重复的元素。在实际工作中,数组的去重操作常用于数据清洗、统计等方面。

下面是一个将数组中重复元素去掉的例子:

public static int[] removeDuplicates(int[] array) {
    if (array == null || array.length == 0) {
        return array;
    }
    int len = array.length;
    Arrays.sort(array);
    int j = 0;
    for (int i = 0; i < len - 1; i++) {
        if (array[i] != array[i + 1]) {
            array[j++] = array[i];
        }
    }
    array[j++] = array[len - 1];
    return Arrays.copyOf(array, j);
}

代码分析:

  这段代码实现了一个移除数组中重复元素的方法,算法的时间复杂度是O(nlogn),其中n为数组的长度。

具体操作步骤如下:

  1. 首先对数组进行排序,使相同的元素排在一起。

  2. 然后使用双指针法,定义指针i和指针j,指针i从0开始,依次遍历数组中的元素,指针j记录不重复的元素个数。

  3. 当发现array[i]与array[i+1]不相同时,说明发现了新元素,将它加入到结果数组,并将指针j向后移动一位。

  4. 最后将数组截取长度为j,返回不重复的元素数组。

  总的来说,这个算法在空间复杂度上比较低,只需要O(1)的额外空间用于记录指针,但时间复杂度偏高,相对于使用哈希表或者Set等数据结构,其速度较慢。

5. 在算法中使用数组

  在算法中,数组通常用于优化算法和提高性能。例如,我们可以使用一个数组来记录某个数出现的次数,然后快速找到出现次数最多的数。

下面是一个找出数组中出现次数最多的元素的例子:

package com.example.javase.se.array;

import java.util.HashMap;
import java.util.Map;

/**
 * @Author ms
 * @Date 2023-11-14 21:11
 */
public class ArrayTest7 {
    public static int findMostFrequentElement(int[] elements) {
        int n = elements.length;
        Map<Integer, Integer> count = new HashMap<>();

        for (int i = 0; i < n; i++) {
            if (!count.containsKey(elements[i])) {
                count.put(elements[i], 0);
            }
            count.put(elements[i], count.get(elements[i]) + 1);
        }

        int mostFrequentElement = -1, maxCount = -1;
        for (Map.Entry<Integer, Integer> entry : count.entrySet()) {
            if (entry.getValue() > maxCount) {
                mostFrequentElement = entry.getKey();
                maxCount = entry.getValue();
            }
        }

        return mostFrequentElement;
    }
    public static void main(String[] args) {
		
    }
}

代码分析:

  这是一个 Java 类,名为 ArrayTest7。它包含了一个静态方法 findMostFrequentElement,用于查找给定数组中出现次数最多的元素。在该方法中,首先创建了一个名为 count 的 HashMap,用于存储每个元素出现的次数。然后,遍历了整个数组元素,并在 count 中更新了相应元素的出现次数。接下来,使用循环遍历 count 中的所有元素,并找出出现次数最多的元素,并将其值赋给了 mostFrequentElement 变量。最后,该方法返回了出现次数最多的元素。在 main 方法中,没有任何代码。

执行结果:

在这里插入图片描述

小结

  数组是Java中常用的数据结构之一,能够优化算法并提高性能。除了常规的数组操作之外,还有很多有趣且实用的应用场景,如二维数组的转置、数组的旋转、查找、去重等操作,以及在算法中使用数组等。这些应用场景在实际工作中也很常见,但并不为人所知。希望本文能为开发者提供一些帮助。

总结

  本文介绍了数组常用但不为人知的几种应用场景,包括二维数组的转置、数组的旋转、查找、去重等操作,以及在算法中使用数组等。这些应用场景在实际工作中也很常见,但并不为人所知。通过学习这些应用场景,可以更好地优化算法并提高性能,同时也能够帮助开发者更好地应对实际工作中的问题。

  总的来说,本文对数组的应用场景进行了详细的讲解,并提供了相应的示例代码和测试用例。对于想要提高编程技术的开发者来说,本文是一篇不错的学习资料,值得一读。

… …

文末

好啦,以上就是我这期的全部内容,如果有任何疑问,欢迎下方留言哦,咱们下期见。

… …

学习不分先后,知识不分多少;事无巨细,当以虚心求教;三人行,必有我师焉!!!

wished for you successed !!!


⭐️若喜欢我,就请关注我叭。

⭐️若对您有用,就请点赞叭。

⭐️若有疑问,就请评论留言告诉我叭。

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

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

相关文章

NLP入门——数据预处理:子词切分及应用

BPE(Byte-Pair Encoding)算法 【西湖大学 张岳老师&#xff5c;自然语言处理在线课程 第十六章 - 4节】BPE&#xff08;Byte-Pair Encoding&#xff09;编码 如果有一个字符串aabaadaab&#xff0c;对其执行BPE算法 因为字符对aa出现频率最高&#xff0c;因此将其替换为码Z&…

开源-Docker部署Cook菜谱工具

开源-Docker部署Cook菜谱工具 文章目录 开源-Docker部署Cook菜谱工具介绍资源列表基础环境一、安装Docker二、配置加速器三、查看Docker版本四、拉取cook镜像五、部署cook菜谱工具5.1、创建cook容器5.2、查看容器运行状态5.3、查看cook容器日志 六、访问cook菜谱服务6.1、访问c…

Web端在线Stomp服务测试与WebSocket服务测试

Stomp服务测试 支持连接、发送、订阅、接收&#xff0c;可设置请求头、自动重连 低配置云服务器&#xff0c;首次加载速度较慢&#xff0c;请耐心等候 预览页面&#xff1a;http://www.daelui.com/#/tigerlair/saas/preview/lxbho9lkzvgc 演练页面&#xff1a;http://www.da…

设计模式-创建型-04-建造者模式

1、盖房项目需求 1&#xff09;需要建房子&#xff1a;这一过程为打桩、砌墙、封顶2&#xff09;房子有各种各样的&#xff0c;比如普通房&#xff0c;高楼&#xff0c;别墅&#xff0c;各种房子的过程虽然一样&#xff0c;但是要求不要相同的3&#xff09;请编写程序&#xf…

解决linux jenkins要求JDK版本与项目版本JDK不一致问题

背景–问题描述&#xff1a; 新入职公司&#xff0c;交接人说jenkins运行有问题&#xff0c;现在都是手动发布&#xff0c;具体原因让我自己看&#xff08;笑哭&#xff09;。我人都蒙了&#xff0c;测试环境都手动发布&#xff0c;那不是麻烦的要死&#xff01; 接手后&am…

bfs+枚举,CF666B - World Tour

一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 Problem - 666B - Codeforces 二、解题报告 1、思路分析 数据量允许跑N次bfs预处理所有点的最短路&#xff0c;以及预处理到达每个点距离最远的3个点&#xff0c;以及每个点能够到达的最远的3个点 我们枚举…

计算机网络(5) ARP协议

什么是ARP 地址解析协议&#xff0c;即ARP&#xff08;Address Resolution Protocol&#xff09;&#xff0c;是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机&#xff0c;并接收返回消息&#xff0c;以此确定…

边缘网关在智能制造工厂中的创新应用及效果-天拓四方

在数字化浪潮席卷之下&#xff0c;智能制造工厂正面临着前所未有的数据挑战与机遇。边缘网关&#xff0c;作为数据处理与传输的关键节点&#xff0c;在提升工厂运营效率、确保数据安全方面发挥着日益重要的作用。本文将通过一个具体案例&#xff0c;详细阐述边缘网关在智能制造…

华为云DDoS攻击下的应对策略

当华为云上的服务遭遇大规模DDoS攻击导致网络流量异常&#xff0c;触发了华为云的自动防护机制&#xff0c;即所谓的“黑洞”状态时&#xff0c;服务将暂时无法访问&#xff0c;直至攻击停止或流量恢复正常。本文将探讨如何在这一情况下&#xff0c;通过引入第三方安全产品来快…

如何利用智能家居打造一个“会呼吸的家”?一体化电动窗帘

如何利用智能家居打造一个“会呼吸的家”&#xff1f;一体化电动窗帘 史新华 隐藏式一体化智能电动窗帘与市面上其他窗帘不同的是&#xff0c;电机内置于轨道之中&#xff0c;一体化&#xff0c;美观、安静、滑动顺畅。 每次都会自动打开和关闭&#xff0c;相当漂亮。 众多家庭…

【精品方案】大型企业数字化转型管控平台解决方案(55页PPT),干货满满!

引言&#xff1a;随着信息技术的飞速发展&#xff0c;数字化转型已成为大型企业提升竞争力、实现持续创新的必经之路。本解决方案旨在为企业提供一套全面、高效、灵活的数字化转型管控平台&#xff0c;助力企业实现业务流程的数字化重构、数据资产的智能管理以及决策过程的精准…

人工智能--制造业和农业

欢迎来到 Papicatch的博客 文章目录 &#x1f349;人工智能在制造业中的应用 &#x1f348; 应用场景及便利 &#x1f34d;生产线自动化 &#x1f34d;质量控制 &#x1f34d;预测性维护 &#x1f34d;供应链优化 &#x1f348; 技术实现及核心 &#x1f34d;机器学习和…

【吊打面试官系列-Mysql面试题】MySQL 数据库作发布系统的存储,一天五万条以上的增量,预计运维三年,怎么优化?

大家好&#xff0c;我是锋哥。今天分享关于 【MySQL 数据库作发布系统的存储&#xff0c;一天五万条以上的增量&#xff0c;预计运维三年,怎么优化&#xff1f;】面试题&#xff0c;希望对大家有帮助&#xff1b; MySQL 数据库作发布系统的存储&#xff0c;一天五万条以上的增量…

R语言统计分析——图形文本、自定义坐标轴和图例

参考资料&#xff1a;R语言实战【第2版】 我们可以在图形上添加标题&#xff08;main&#xff09;、副标题&#xff08;sub&#xff09;、坐标轴标签&#xff08;xlab、ylab&#xff09;并指定标轴范围&#xff08;xlim、ylim&#xff09;。 # 录入数据 dose<-c(20,30,40,4…

JAVA反编译工具-CFR(class单个反编译、JAR包整体反编译)

环境说明 1、win10 2、JAVA8&#xff08;环境变量要配置好&#xff09; 3、cfr版本&#xff1a;C:\Users(xx)当前用户\cfr-0.152.jar 4、命令行操作路径&#xff1a;C:\Users(xx)当前用户 5、示例反编译jar包&#xff1a;C:\Users(xx)当前用户\ruoyi-admin.jar CFR工具相关参…

HarmonyOs修改应用名称和图标方法

最近在开发Harmony应用&#xff0c;发现修改app.json5下的lable:app_name和icon不生效 后来经过查找&#xff0c;原来还需要更改entry下的src/main/module.json5才行&#xff0c;具体操作路径是&#xff1a; 更改后生效&#xff1a;

LeetCode刷题之HOT100之不同的二叉搜索树

1、题目描述 2、逻辑分析 给定一个有序序列 1⋯n&#xff0c;为了构建出一棵二叉搜索树&#xff0c;我们可以遍历每个数字 i&#xff0c;将该数字作为树根&#xff0c;将 1⋯(i−1) 序列作为左子树&#xff0c;将 (i1)⋯n 序列作为右子树。接着我们可以按照同样的方式递归构建…

读AI未来进行式笔记11丰饶时代与奇点

1. 第四次工业革命 1.1. 在AI轰轰烈烈地拉开第四次工业革命帷幕的同时&#xff0c;一场清洁能源革命也紧锣密鼓地展开 1.1.1. 清洁能源革命好比一场“及时雨”&#xff0c;不但将解决日益加剧的全球气候变化问题&#xff0c;而且会大幅降低全世界的电力成本 1.1.2. 人们将致…

谷歌发布HyperDreameBooth:单张人像20秒内完成模型训练,速度比DreamBooth快25倍,模型小10000倍

HyperDreamBooth是谷歌去年发布的革命性模型训练方法&#xff0c;单张人像20秒内完成模型训练&#xff0c;速度比DreamBooth快25倍&#xff0c;模型小10000倍&#xff0c;但是没有不开源。 今年&#xff0c;论文《HyperDreamBooth: HyperNetworks for Fast Personalization of…

【沟通管理】项目经理《葵花宝典》之跨部门沟通

为什么每次跟其它部门的沟通总是不欢而散&#xff1f; 为什么每次想好好的就事论事的时候&#xff0c;却总是像在吵架&#xff1f; 为什么沟通总是不同频&#xff1f; 这是不是你作为项目经理在跨部门沟通时经常会遇到的问题&#xff1f; 在企业项目管理中&#xff0c;跨部门沟…