博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
算法之双指针法(一)
阅读量:6922 次
发布时间:2019-06-27

本文共 2178 字,大约阅读时间需要 7 分钟。

双指针法在很多场景及算法中都有使用   主要应用的算法题如下:
  1. 一个数组中有奇数也有偶数,将所有奇数放到数组左边,将所有偶数放到数组右边

    int[] array = {2, 1, 3, 6, 4, 5, 7, 9};int i = 0;int j = array.lentgh - 1;while (i < j){    while(i

    时间复杂度O(n)

  2. 一个数组中既有奇数也有偶数,奇数的下标是奇数,偶数的下标是偶数

    int[] array = {1, 2, 3, 6, 4, 8, 7, 9};int even = 0; //偶数int odd = 1;  //奇数int end = array.length - 1;while(even <= end && odd <= end){    if((array[end] & 1) == 0){ //如果数组最后一个是偶数        swap(array, even, end);        even+=2;    }else{        swap(array, odd, end);        odd+=2;    }}for(int i =0; i

    时间复杂度O(n)

  3. 求一个有序数组中和等于8的下标

    int[] array = {1, 2, 3, 4, 5, 6 ,7, 8};int i = 0;int j = array.length - 1;while(i < j){    if(array[i] + array[j] == 8){        System.out.println("i="+i+" j="+j);        i++;        j--;    }else if(array[i] + array[j] > 8){        j--;    }else{        i++;    }}

    时间复杂度O(n)

  4. 两个有序数组合并且去重合成新数组

    int[] a = {4, 8, 10 ,28};int[] b = {3, 9, 10, 17, 28, 30, 40};int[] c = new int[a.length+b.length];int i = 0; int j = 0; int k = 0;while(i < a.length && j < b.length){    if(a[i] < b[j]){        c[k++] = a[i++];    }else if(a[i] == b[j]){//去重        c[k++] = a[i];        i++;        j++;    }else{        c[k++] = b[j++];    }}while(i < a.length){   c[k++] = a[i++];}while(j < b.length){    c[k++] = b[j++];}for(int m = 0; m

    时间复杂度O(n)

  5. 快速排序

    int[] array = {3, 4, 1, 7, 6, 2, 0};sortCore(array, 0, array.length -1);private static void sortCore(int[] array, int startIndex, int endIndex) {    if(startIndex > endIndex){        return;    }    int boundray = boundray(array, startIndex, endIndex);    sortCore(array, startIndex, boundray - 1);    sortCore(array, boundray + 1, endIndex);}private static int boundray(int[] array, int startIndex, int endIndex) {    int standard = array[startIndex];    int leftIndex = startIndex;    int rightIndex = endIndex;    while(leftIndex < rightIndex){        while(leftIndex < rightIndex && array[rightIndex] >= standard){            rightIndex--;        }        array[leftIndex] = array[rightIndex];        while(leftIndex < rightIndex && array[leftIndex] <= standard){            leftIndex++;        }        array[rightIndex] = array[leftIndex];    }    array[leftIndex] = standard;    return leftIndex;}

转载地址:http://wbujl.baihongyu.com/

你可能感兴趣的文章
Haskell: install from source
查看>>
mxd文件批量更换版本
查看>>
cocos2dx骨骼动画Armature源码分析(三)
查看>>
JS API 4.x地图渲染之符号(二)(转载)
查看>>
Poj1258--Agri-Net(Prime)
查看>>
xcode6是否导入framework
查看>>
Linux 远程登录 | 菜鸟教程
查看>>
EAR文件结构
查看>>
[转] 通过jQuery Ajax使用FormData对象上传文件
查看>>
valid sudoku leetcode
查看>>
Activity 生命周期的回顾
查看>>
jsp(计算器)
查看>>
拆轮子系列--RxJava理解(三)--observeOn
查看>>
【JNI开发】之从零开始
查看>>
第一次迭代开发心得
查看>>
火莹升级Cocos引擎为3.17.2
查看>>
导出Excel
查看>>
会议室预约时间选择
查看>>
用SQL实现统计报表中的“小计”和“合计”
查看>>
【备忘】Idea的那些事
查看>>