利用问题的本身与序列的特新,使用两个下标i, j对序列进行扫描(可以同向扫描,也可以反向扫描),以较低的时间复杂度解决问题,一般是O(n)

例1:给定一个递增的正整数序列和一个正整数M,求序列中的两个不同位置的数a和b,使得它们的和恰好为M,输出所有满足条件的方案。加入给定序列{ 1,2,3,4,5,6 }与正整数M = 8,就存在2 + 6 = 8与3 + 5 = 8成立。

暴力解法:时间复杂度为O(n ^ 2),两层两串层循环枚举。

分析:
令下标i的初值为0,下标j的初值为n-1,前者向右移动,后者向左移动,一直到i>=j成立
1.当a[i]+a[j]==M符合条件时,剩余的方案只有可能在[i+1,j-1]中出现于是令i++;j–;
2.当a[i]+[j]<M时,剩余的方案只可能在[i+1,j]中出现,于是让i++;
3.当a[i]+a[j]>M时,剩余的方案只可能在[i,j-1]中出现,j–;
代码实现如下:

while (i >= j) {
if (a[i] + a[j] == M) {
i++;
j--;
}
else if (a[i] + [j] < M) {
i++;
}
else j--;
}

此算法的复杂度仅为O(n).

例2:两个递增序列A,B合并成为一个递增序列C,同时考虑两个序列,对两个序列进行比较,再选择填入序列C
代码实现:

int merge(int A[], int B[], int C[], int n, int m) {//n为A[]中元素个数,m为B[]中元素个数。
int i = 0, j = 0, index = 0;
while (i < n && j < m) {
if (A[i] <= B[j]) {
C[index++] = A[i++];
}
else if{
C[index++] = B[j++];
}
while (i < n){
C[index++] = A[i++];
}
while (j < m){
C[index++] = B[j++];
}
return index;
}
}

随机推荐

  1. 二分图最小点覆盖构造方案+König定理证明

    前言 博主很笨 ,如有纰漏,欢迎在评论区指出讨论. 二分图的最大匹配使用 \(Dinic\) 算法进行实现,时间复杂度为 \(O(n\sqrt{e})\),其中, \(n\)为二分图中左部点的数量, ...

  2. Go的结构体

    目录 结构体 一.什么是结构体? 二.结构体的声明 三.创建结构体 1.创建有名结构体 2.结构体初始化 2.1 按位置传参 2.2 按关键字传 3.创建匿名结构体 四.结构体的类型 五.结构体的默认 ...

  3. tesseract-ocr和tesseract.exe is not installed or it's not in your path问题解决

    一.解决方案: 1.http://www.ddooo.com/softdown/94968.htm   打开下载的压缩包,找到"tesseract-ocr-setup-3.02.02.exe ...

  4. SpringBoot(八):SpringBoot中配置字符编码 Springboot中文乱码处理

    SpringBoot中配置字符编码一共有两种方式 方式一: 使用传统的Spring提供的字符编码过滤器(和第二种比较,此方式复杂,由于时间原因这里先不介绍了,后续补上) 方式二(推荐使用) 在appl ...

  5. if...else和switch...case

    一.位运算 class Demo01 { public static void main(String[] args) { int a = 5; int b = 3; /* 0000 0101 |00 ...

  6. 抽一根烟的时间学会.NET Core 操作RabbitMQ

    什么是RabbitMQ? RabbitMQ是由erlang语言开发的一个基于AMQP(Advanced Message Queuing Protocol)协议的企业级消息队列中间件.可实现队列,订阅/ ...

  7. 腾讯云容器服务 TKE 拿下新加坡 MTCS 最高级别安全认证

    近日,腾讯云容器服务 TKE 荣获新加坡 MTCS 最高级安全认证,标志着腾讯云 TKE 在为用户提供可靠.易部署.灵活扩展等基础服务上,已经全面满足了新加坡监管机构以及多个行业客户对服务安全的要求. ...

  8. Nebula Storage 2.0 存储格式

    随着 2.0 各版本的陆续发布,Nebula Graph 迎来了一系列的改动,在存储方面,影响最大的改动就是底层编码格式进行了修改.Nebula Graph 的底层存储是基于 KV 保存在 Rocks ...

  9. 推荐一个能让谷歌浏览器变暗色的插件(darkreader)

    下载 https://codechina.csdn.net/mirrors/darkreader/darkreader?utm_source=csdn_github_accelerator 安装教程 ...

  10. freebsd升级时出错,没有ntp用户解决

    freebsd升级出错,没有ntp用户 终端执行命令 pw groupadd ntpd -g 123 pw useradd ntpd -u 123 -g ntpd -h - -d /var/db/nt ...