//A1.java
public class A1 {
final static int N = 1000;// 数组长度
final static int m = 10;// 待查找的1串的长度
private static int amount1 = 0;
private static int amount2 = 0;
public static void main(String[] args) {
int a[] = new int[N];
makeArray(a);
printArray(a);
System.out.println("\n");
int result = exec1(a, m);
if (result != -1) {
for (int i = 0; i < N; i++) {
if (i == result) {
System.out.println();
}
System.out.print(a[i]);
}
System.out.println();
} else {
System.out.println("没有结果");
}
System.out.println("\n改进算法比较的次数:\t" + amount1);
exec2(a);
System.out.println("简单循环算法比较的次数:\t" + amount2);
}
// 生成0/1数组
static void makeArray(int a[]) {
for (int i = 0; i < a.length; i++) {
a[i] = (int) (Math.random() * 2);
}
}
// 打印数组
static void printArray(int a[]) {
for (int i = 0; i < N; i++) {
System.out.print(a[i]);
}
}
// 在数组a[]中找出长度为m的1串的首次出现位置
static int exec1(int a[], int m) {
int i = m - 1, j = 1, k = 1, n;
for (int count = 1; count < m && i < a.length; i += (m - 1)) {
count = 1;
amount1++;
if (a[i] == 1) {
n = (i == m - 1) ? m : (m - 1);
// 往上,遍历到到i-(m-2)
// 除了i=m-1时,遍历到i-(m-1)
for (j = 1; j < n; j++) {
amount1++;
if (a[i - j] == 1) {
count++;
} else {
break;
}
}
// 往下,遍历到i+(m-1)
for (k = 1; k < m; k++) {
amount1++;
if (i + k < a.length && a[i + k] == 1) {
count++;
} else {
break;
}
}
}
}
return (i < a.length) ? (i - (m - 1) - (j - 1)) : (-1);
}
// 简单循环方法
public static void exec2(int a[]) {
for (int i = 0, count = 0; i < a.length; i++) {
if (count == 10) {
break;
}
amount2++;
if (a[i] == 1) {
count++;
} else {
count = 0;
}
}
}
}
0010000110111101011010101000101001110111000110010001111010111100011000011111111110100100001111110001101011010001000101011100011100111000110010010111100101101011100010110100111010000001000101110101111000001111100110101010010101011011010110011010101000111011001001110111000011001110111001100010001001010100111001111111110100000110001100010101101000011111011000011111111101100000010000000111111000000101111011110101101110101101100100001011110110010110111001110110001011110000111100000000010011101100101010101100101110000011100100010000101100101001001001000101001100010100011000110001011010101010000101000111000101011100111011101101110010100110001011011100110001110010010010101101111001101101100100100011001110111111110100001001001110101101100111101101000110000101000111000001011111010000110000011110001111100100010011100001010111011110011011101010101011011101100011110001101011110100011100011100110111110010101110011101000000011100111000111001001101000011100011001110100110110100111100111011000000011000
00100001101111010110101010001010011101110001100100011110101111000110000
11111111110100100001111110001101011010001000101011100011100111000110010010111100101101011100010110100111010000001000101110101111000001111100110101010010101011011010110011010101000111011001001110111000011001110111001100010001001010100111001111111110100000110001100010101101000011111011000011111111101100000010000000111111000000101111011110101101110101101100100001011110110010110111001110110001011110000111100000000010011101100101010101100101110000011100100010000101100101001001001000101001100010100011000110001011010101010000101000111000101011100111011101101110010100110001011011100110001110010010010101101111001101101100100100011001110111111110100001001001110101101100111101101000110000101000111000001011111010000110000011110001111100100010011100001010111011110011011101010101011011101100011110001101011110100011100011100110111110010101110011101000000011100111000111001001101000011100011001110100110110100111100111011000000011000
改进算法比较的次数: 27
简单循环算法比较的次数: 81
0011111110101100100011001000100000110110110011110100100100011011010001111010111101111011111101111001000010111101101010010011010001101010001100111001111110000100000101001110000000111000011011010010111010111010000001100011111101010001000010001010100110011111111000100000001000010110101000011100100011011101011011101110111101001111100001010111010111001001101000001000101001000011001001000010111011101011000011011001000110000110110101011011101011010100101111001101110011001000011011010110010000100011110110010011100110001011011101111111000110000111000101011101010101111001001000000111101101011010111010010100111101001010001111101111100110000111000000110001010001000011000101100011111101101010101101000010010100110100010101001110111110110000111001010101101000001100001100110011010010111101011111110010110011111111001010001010101101111011010110110100010000101000000100000010100001110010110000001000101011010000010011011101100011110100000011001110001100001111011111001001010010101111100001010101000010101111
没有结果
改进算法比较的次数: 339
简单循环算法比较的次数: 1000
分享到:
相关推荐
假设我们有一个主字符串`s`和一个目标子字符串`t`,我们需要找出`s`中`t`首次出现的位置。如果不存在这样的位置,返回-1。此题目的核心是实现高效的字符串查找方法。 解决方案一:暴力遍历法 最直观的方法是遍历主...
任务是找到子串在主字符串中的首次出现位置,如果不存在则返回-1。这是一个经典的字符串搜索问题,可以使用多种方法来解决,例如朴素的线性搜索、KMP(Knuth-Morris-Pratt)算法或Boyer-Moore算法。 1. **线性搜索*...
`indexOf`是用于查找子字符串在主字符串中首次出现的位置的方法。如果找不到,它会返回-1。例如: ```javascript var the_word = "monkey"; var location_of_m = the_word.indexOf("m"); // 返回0 var location_of_o...
我们需要找出那些在其中一个句子中出现一次,而在另一个句子中未出现的单词。结果应以列表形式返回,单词顺序无关紧要。 提供的代码实现了一个名为`Solution`的类,其中包含一个成员函数`uncommonFromSentences`。...
- 能够高效地从大量文档中找出包含特定关键词的文档。 2. **计算生物学领域**: - DNA序列比对,用于基因组学的研究。 - 通过模式匹配找到相似的基因片段,有助于理解生物进化关系。 3. **信息安全领域**: - ...
要求在文本串\( T \)中找出第一个模式串出现的位置。特别地,当存在多个模式串在同一位置开始匹配时,通常只需要找到第一个出现的模式串即可。 **约束条件:** - \( 900K \leq n \) - \( 1000 \geq m \) - \( 100K ...
9. **AC自动机(Aho-Corasick算法)**:AC自动机用于同时匹配多个模式串,它基于后缀数组和字典树的概念,构建了一个状态机,能一次性找出所有模式串的出现位置。 10. **动态规划在字符串问题中的应用**:许多字符...
- **查找**:`strstr()`用于在一个字符串中查找子串首次出现的位置。 3. **字符串匹配** - **KMP算法**:一种高效的字符串匹配算法,避免了不必要的回溯,时间复杂度为O(n + m)。 - **Boyer-Moore算法**:利用坏...
这是一个文本处理的问题,需要编写程序找出一个给定的单词在一篇文章中出现的次数和首次出现的位置。题目要求忽略大小写,但要求完全匹配,即匹配的单词必须与文章中的独立单词完全相同。输入包括一个目标单词和一篇...
4. **找出候选人**:遍历每组数据中的每个人,如果一个人被认识的人数等于总人数且认识别人的人数为 1,则将其视为候选人。 5. **输出结果**:对于每组数据,输出候选人的数量及编号。 #### 题目二:查找字符串中...
40. 数组中只出现一次的两个数,而其他数都出现两次:可以考虑使用异或运算的性质来找出成对的数字,然后通过异或运算找出只出现一次的数字。 41. 和为s的连续整数序列:可以使用滑动窗口的方法,维护一个窗口区间...
1. **预处理模式串**:通过预处理模式串,找出模式串中的一些特性,如最长前缀后缀等,可以有效减少不必要的比较次数。 2. **利用跳过规则**:在发现不匹配的情况下,可以通过计算适当的位移来避免重复检查已知不...
该算法主要用于在一个长字符串(文本串)中查找一个给定的短字符串(模式串)的首次出现位置,而无需回溯。KMP算法的核心在于利用模式串的前缀和后缀关系,构建一个“部分匹配表”,以此来避免不必要的比较,提高...
**取最大值指令MAX**和**取最小值指令MIN**:分别用于找出两个数中的最大值和最小值。 **赋值指令MOVE**:将一个变量的值复制到另一个变量。 **类型转换指令**:包括布尔类型、字节类型、日期类型、实数/长实数...
内容及步骤: 1、 设有一个线性表(e0,e1,e2,e3,…,en-2,en-1)存放在一个一维数组A[arraySize]中的前n个数组元素位置。请编写一个函数将这个线性表原地逆置,即将数组的前n个原地址内容置换为(en-1,en-2,…,e3,...
KMP算法是一种用于高效搜索子串在主串中是否存在以及首次出现位置的算法。这里的扩展要求处理包含'.'和'*'的表达式,'.' 可以匹配任意一个字符,'*'表示前面的字符可以重复任意次。解题的关键在于理解'*'的含义,并...
C++标准库提供了一个名为`strstr`的函数,用于在一个字符串中查找子字符串首次出现的位置。上述代码中,我们看到一个自定义的`strstring`函数,它通过比较两个指针指向的字符来实现相同的功能。该函数首先遍历父...
- **题目**:在 Java 中如果要在字符串类型对象 s="JAVA" 中找出 „V‟ 出现的位置可使用下面哪个方法? - **选项**: - A. mid(2,s); - B. charAt(2); - C. s.indexOf("V"); - D. indexOf(s, 'V'); - **解析...
- 找出n个数据中最大值首次出现的位置,通过遍历数组并更新最大值及其位置来实现。 13. **最小值位置**: - 同理,找出最小值首次出现的位置,遍历数组并更新最小值及其位置。 14. **数字乘积**: - 求一个n位...
#### 正则表达式的例子: 找出包含URL的行 - **示例**: ```ruby text = "Visit us at http://example.com. Or check out https://ruby-lang.org." url_pattern = /https?:\/\/[^\s]+/ urls = text.scan(url_...