利用问题的本身与序列的特新,使用两个下标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. 「NGK每日快讯」2021.1.5日NGK第63期官方快讯!

  2. bluestein算法

    我们熟知的FFT算法实际上是将一个多项式在2n个单位根处展开,将其点值对应相乘,并进行逆变换.然而,由于单位根具有"旋转"的特征(即$w_{m}^{j}=w_{m}^{j+m}$) ...

  3. Docker中配置MySQL并实现远程访问

    Docker配置MySQL容器 拉取MySQL镜像 docker pull mysql:5.6 有可能会因为网络问题失败,重复尝试. 创建容器 docker run -d --name selfdef ...

  4. SpringBoot 整合 hibernate 连接 Mysql 数据库

    前一篇搭建了一个简易的 SpringBoot Web 项目,最重要的一步连接数据库执行增删改查命令! 经过了一天的摸爬滚打,终于成功返回数据! 因为原来项目使用的 SpringMVC + Hibern ...

  5. Elasticsearch 7.x配置用户名密码访问 开启x-pack验证

    一.修改elasticsearch 配置文件 1.在配置文件中开启x-pack验证 #进入es安装目录下的config目录 vim elasticsearch.yml # 配置X-Pack http. ...

  6. IntelliJ Idea tomcat 控制台输出乱码

    reference: https://blog.csdn.net/dandandeshangni/article/details/485442211. 在运行/调试 配置对话框的Startup/Con ...

  7. 清除浏览器默认样式的reset.css(转载于reset.css的官方)

    /* http://meyerweb.com/eric/tools/css/reset/ v2.0-modified | 20110126 License: none (public domain) ...

  8. MySQL注入流程

    目录 确认注入点 信息收集 数据获取 提权 写个MySQL注入流程的大纲,类似一份全局地图,能指导下一步工作.MySQL注入流程分为四步: 确认注入点 信息收集 数据获取 提权 确认注入点 参考:ht ...

  9. 话说 synchronized

    一.前言 ​ 说起java的锁呀,我们先想到的肯定是synchronized[ˈsɪŋ krə naɪ zd]了 ,这个单词很拗口,会读这个单词在以后的面试中很加分(我面试过一些人 不会读 ,他们说的 ...

  10. Java入门和环境配置ideaJ安装

    Java入门及环境搭建 目录 Java入门及环境搭建 什么是Java Java Java的发展 Java的特性和优势 Java三大版本 JDK JRE JVM JAVA开发环境搭建 安装JDK 卸载J ...