Java时间复杂度介绍以及枚举

时间复杂度

从小到大:

O(1)

常数阶。复杂度为O(1)与问题规模无关

线性阶

O(n)比如一个for循环中代码执行n遍

n阶

对数阶

int n=9; int i=1; while(i<n) { i*=2; }

2^x>n时候退出。次数x=log2^n

时间复杂度为O(logN)

根号阶

int n=9;

int i=1;

while(i

i++;

}

平方阶

嵌套的两层for循环。

按每秒执行10^8计算:

题目数据nnnN

2.枚举

计算1到n中,数字x出现次数

Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int res = 0; int x = sc.nextInt(); for (int i = 1; i <= n; i++) { String f=i+" "; for(int j=0;j<f.length();j++){ int c=f.charAt(j)-'0'; if(c==x)res++; } } System.out.println(res);

模拟

按照题目要求一步步写出代码

地雷分布在n行m列的方格中,输入整数第一行n,m;

接下的n行依次输入数据,1表示有地雷,0表示没地雷

对于有地雷的要输出9;没地雷的输出其周围相邻的地雷数。

import java.util.Scanner;

public class TT {

public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt();

int m = sc.nextInt();

int[][] p = new int[n][m]; // 输入二维数组数据 for (int i = 0; i < n; i++) {

for (int j = 0; j < m; j++) {

p[i][j] = sc.nextInt();

} } // 处理二维数组元素

for (int i = 0; i < n; i++) {

for (int j = 0; j < m; j++) {

if (p[i][j] == 1) {

System.out.print(9 + " ");

}

else {

int ans = 0;

for (int k = i - 1; k <= i + 1; k++) {

for (int l = j - 1; l <= j + 1; l++) {

if (k < 0 || l < 0 || k >= n || l >= m) continue; if (p[k][l] == 1) ans++;

} }

System.out.print(ans + " ");

} }

System.out.println();

} } }

2063ee145d074c31b8030331f2c1296f.png

处理串

 

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Java算法中,枚举法(Enumeration)是一种常见的算法技术,它通常用于在有限的选择集合中查找或比较特定的值。 具体地说,枚举法是通过依次遍历选择集合中的每个元素,并对其进行处理或比较,以确定所需的值是否存在或符合要求。在Java中,枚举法通常可以通过以下步骤实现: 1. 定义一个包含所有可选值的枚举类型(Enum)。 2. 遍历枚举类型中的所有值,对每个值进行处理或比较。 3. 根据具体的需求,可能需要在遍历过程中保存一些状态或结果。 以下是一个使用枚举法查找数组中最小值的Java代码示例: ```java public class EnumExample { enum Option { MIN, MAX } public static int findExtremeValue(int[] array, Option option) { int extremeValue = array[0]; for (int i = 1; i < array.length; i++) { if (option == Option.MIN) { if (array[i] < extremeValue) { extremeValue = array[i]; } } else if (option == Option.MAX) { if (array[i] > extremeValue) { extremeValue = array[i]; } } } return extremeValue; } public static void main(String[] args) { int[] array = { 3, 5, 1, 7, 9 }; int minValue = findExtremeValue(array, Option.MIN); int maxValue = findExtremeValue(array, Option.MAX); System.out.println("Min value: " + minValue); System.out.println("Max value: " + maxValue); } } ``` 在这个示例中,我们定义了一个包含两个可选值(最小值和最大值)的枚举类型Option,并使用findExtremeValue方法遍历了数组中的所有元素,以查找最小值或最大值。具体地说,我们使用了if语句来根据选项参数option的值来决定如何比较数组中的元素,并在遍历结束后返回极值。 ### 回答2: 枚举法是一种求解问题的方法,它通过遍历所有可能的解,逐个进行尝试和比较,从中找到满足条件的最佳解。 在Java算法中,枚举法经常被用于求解搜索、排序、组合、排列和子集等问题。它的基本思路是通过循环遍历所有可能的组合或排列,逐个进行判断和处理。 举个例子,假设我们要在一个整数数组中找到两个数之和为给定值的组合。可以通过枚举法来解决。首先,我们可以使用双重循环遍历数组中的每一对数,然后判断它们的和是否等于给定值。如果相等,则找到了一个满足条件的组合。 另外一个例子是求解最短路径问题。通过枚举法,可以遍历所有可能的路径,然后计算每条路径的长度,最后找到最短的路径。 在实际应用中,枚举法的时间复杂度通常较高,因为需要遍历所有可能的解空间。为了提高效率,可以结合其他算法进行优化,如剪枝、动态规划等。 总而言之,枚举法是一种常用的求解问题的方法,它通过遍历所有可能的解,逐个进行尝试和比较,从中找到满足条件的最佳解。在Java算法中,它经常被用于求解搜索、排序、组合、排列和子集等问题。 ### 回答3: 枚举法是一种常用的算法思想,用于解决问题中所有可能的情况。在Java算法中,枚举法可以通过以下步骤运用: 1.确定问题的解空间:首先,要确定问题的可能解的范围,即问题的解空间。解空间可以是一个集合、一个数组、一个字符串等。 2.生成可能的解:根据问题的解空间,生成所有可能的解。通常可以使用循环结构来枚举解空间中的每个元素或组合。如果解空间较大,可以使用递归方式进行枚举。 3.检验可能的解:对于生成的每个可能的解,进行检验,判断其是否满足问题的约束条件。如果满足约束条件,则将其作为候选解,否则舍弃。 4.求解最优解:根据问题的具体要求,对所有满足约束条件的候选解进行比较,找到最优解或符合要求的解。可以使用比较运算符、排序算法等方式进行比较。 5.输出结果:输出求解得到的最优解或符合要求的解。 需要注意的是,枚举法在解空间较大的情况下往往会造成时间复杂度较高,因此在使用时需要合理选择解空间,避免不必要的枚举。此外,可以通过优化算法设计、剪枝等方式提高枚举算法的效率。 总而言之,枚举法是一种通过穷举所有可能解来求解问题的算法思想,在Java中可以通过循环或递归方式进行枚举,并对每个可能解进行检验和比较,最终求解出最优解或符合要求的解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值