美文网首页
算法记忆

算法记忆

作者: RedHatMe | 来源:发表于2018-10-07 20:20 被阅读0次

在线 编译 地址 http://www.dooccn.com/cpp/#contact

二分查找

递归

注意 left<=right 的时候 binarySearch传入的是mid-1 和mid+1 ,不然死循环

#include <iostream>
using namespace std;
int binarySearch(int* a, int left,int right,int val){
    if(left<= right){
        int mid = (left+right)/2;
        if(a[mid]>val){
            return binarySearch(a,left,mid-1,val);
        }else if(a[mid]<val){
            return binarySearch(a,mid+1,right,val);
        }else{
            return mid;
        }
    }
    return -1;
}
int main()
{
    int a[] = {22,33,44,55,66,77};
    int val = 56;
    int x = binarySearch(a,0,5,val);
   cout <<x;
   return 0;
}

非递归

#include <iostream>
using namespace std;
int binarySearch(int* a, int left,int right,int val){
    while(left<= right){
            int mid = (left+right)/2;
        if(a[mid]>val){
            right = mid-1;
        }else if(a[mid]<val){
            left = mid+1;
        }else{
            return mid;
        }
    }
    return -1;
}
int main()
{
    int a[] = {22,33,44,55,66,77};
    int val = 55;
    int x = binarySearch(a,0,5,val);
   cout <<x;
   return 0;
}

堆排序

#include <iostream>
using namespace std;
// n =a.size()-1 
void adjust(int* a ,int cur,int n){
        while(2*cur+2 <= n){
            int index = a[2*cur+1]>a[2*cur+2]?2*cur+1:2*cur+2;
            if(a[cur]< a[index]){
                int tmp = a[cur];
                a[cur] = a[index];
                a[index] = tmp;
                cur = index;
            }else{
                break;
            }
            
        }
} 
int heapSort(int* a, int n){
    for(int i = n/2 ;i>=0;i--){
        //create big heap 
        adjust(a,i,n);
    }
    for(int i = n;i>=0;i--){
        int tmp = a[i];
        a[i] = a[0];
        a[0] = tmp;
        if(i-1>=0){
            adjust(a,0,i-1);
        }
    }
}
int main()
{
    int a[] = {22,113,454,232,565,11,34,55};   
     heapSort(a,7);
     for(int i=0;i<8;i++){
          cout <<a[i]<<endl;
     }
   return 0;
}

链表翻转

#include <iostream>
using namespace std;
// n =a.size()-1 
struct Node{
  int x;
  Node* next;
  Node(int val):x(val),next(NULL){}
};

Node* reverseLinkList(Node* pHead){
    if(!pHead) return NULL;
    Node* pBehind = NULL;
    Node* pFront = NULL;
    Node* p = pHead;
    while(p){
        pFront = p->next;
        p->next = pBehind;
        pBehind = p;
        p = pFront;
    }
    return pBehind;
}


int main()
{
    Node* node = new Node(1);
    node->next = new Node(3);
    node->next->next = new Node(5);
    Node* nodere = reverseLinkList(node);
    while(nodere){
        cout<<nodere->x<<endl;
        nodere = nodere->next;
    }
    return 0;
}

相关文章

  • 算法记忆

    在线 编译 地址 http://www.dooccn.com/cpp/#contact 二分查找 递归 注意 le...

  • 排序算法记忆

    选泡插 快归堆希桶计基 n方n老n13 对n加K N乘K不稳稳稳不稳稳 不稳不稳稳稳稳

  • Python 算法 第一章 介绍

    题学习使用教材<Python算法教程> Python 算法教程 在此进行记录,方便以后学习,加深记忆.

  • 准备刷算法题了,才发现自己连时间复杂度和空间复杂度都忘了

    前言 最近打算好好刷刷算法题,然鹅发现自己对这个算法复杂度的知识记忆已全部返还给数据结构老师了 一、算法 算法(A...

  • 记忆化递归算法

    递归常用来解决一些可拆分的,并且拆分到一定程度自然得到解的问题,最经典的就是斐波那契数列(1,1,2,3,5......

  • KNN算法基础

    KNN算法是机器学习中最好理解的算法之一,属于惰性学习算法的典例。惰性指模型仅通过对训练数据集的记忆功能进行预测,...

  • 递归算法的记忆化

    今天来搞一个递归算法。 有一只青蛙,一次能跳一级,也能跳两级,问跳n级台阶的时候,有几种方法? 这是一个很简单的递...

  • 函数记忆

    什么是函数记忆? 函数记忆是一种编程技巧,通过牺牲算法的空间复杂度以换取更优的时间复杂度 函数记忆的实现 向mem...

  • 在Object-C中学习数据结构与算法之排序算法

    笔者在学习数据结构与算法时,尝试着将排序算法以动画的形式呈现出来更加方便理解记忆,本文配合Demo 在Object...

  • 8.19 - hard - 67

    329. Longest Increasing Path in a Matrix 九章算法班里讲过的一道题,用记忆...

网友评论

      本文标题:算法记忆

      本文链接:https://www.haomeiwen.com/subject/egkraftx.html