• 剑指offer-笔记


    1.任意进制间的转换

       思想:转换到10进制以后在转换为想要的进制

      要点:注意大于10进制的用‘A~Z’来表示

      

    string Cvt(string str1,int m,int n)
    {
      string str2;
      long int tem=0;
      int p;
      for(int i=0;i<str1.size();i++)
      {
         if(str1[i]>='0'&& str1[i]<='9')
             p=str1[i]-'0';
         else
             p=str1[i]-'A'+10;
         tem=tem*m+p;
      }
      while(tem)
      {
        p=tem%n;
        tem=tem/n;
        if(p>=0 && p<=9)
          str2=char('0'+p)+str2;
        else
          str2=(char)(p-10+'A')+str2; 
      }
     return str2;
    
    }
    int main()
    {
      string str1="350A";
      int m=16;
      int n=10;
      string str2=Cvt(str1, m, n);
      cout << str2 << endl;
    
    }

    2.非循环和乘除的1+2+3+.....n

     思想:利用构造函数+静态变量

     要点: 类外初始化静态变量

    using namespace std;
    
    class A
    {
    private:
        static unsigned int N;
        static unsigned int Sum;
    public:
        A(){++N;Sum+=N;}
        static void init(){N=0;Sum=0;}
        static unsigned int getSum(){return Sum;};
    };
    
    unsigned int A::N=0;
    unsigned int A::Sum=0;
    
    void main()
    {
        int n=10;
        A *a=new A[n];
        delete []a;
        a=NULL;
        unsigned int Sum=A::getSum();
        
        cout<<Sum<<endl;
    
    
    }

     3.快速排序求第K 大或者中位数

       思想:第k大就是排后所在的顺序

      要点;快排的时候对end的更新

      

    #include <iostream>
    #include <vector>
    #include <algorithm>
    #include <string>
    #include<ctime>
    using namespace std;
    
    template<typename T>
     T RandomInRange(T start ,T end)
    {
        srand(time(0));
        return rand()%(end-start)+start;
    
    }
    
    
    int parttion(int data[],int len,int start,int end)
    {
        if(data==NULL || len<0 || start<0 || end>len)
            throw new std::exception("Invalid Parameters!");
        int index=RandomInRange(start ,end);
        swap(data[end],data[index]);
        
        int small=start-1;
        for(int i=start;i<end;i++)
        {  
           if(data[i]<data[end])
           {
             small++;
             if(small!=i)
                swap(data[small],data[i]);
           }
        }
        small++;
        swap(data[small],data[end]);
        return small;
    
    }
    void QuickSort(int data[],int len,int start ,int end)
    {
        if(start==end)
            return;
        int index=parttion(data,len,start, end);
        if (index>start)
                QuickSort(data,len,start ,index-1);
        if (index<end)
                QuickSort(data,len,index+1,end);
    
    
    }
    
    void main()
    {
        
        int a[7]={1,4,4,8,8,8,8};
    
        int len=7;
        int index=0;
        int mid_len=len>>1;
        int start=0;
        int end=6;
        while(index!=mid_len)
        {
           index=parttion(a,len,start, end);
           if(index>mid_len)
               end=index-1;
           else
               start=index+1;
        }
       cout<<a[index]<<endl;
        
    
    }

    4.利用c++自带的sort函数求解:

       

    bool compare(int a,int b)
    {
          return a<b;   //升序排列,如果改为return a>b,则为降序
    
    }
    
    int _tmain(int argc, _TCHAR* argv[])
    {
         int a[20]={2,4,1,23,5,76,0,43,24,65},i;
         for(i=0;i<20;i++)
           cout<<a[i]<<endl;
         sort(a,a+20,compare);
         for(i=0;i<20;i++)
           cout<<a[i]<<endl;
         return 0;
    }
  • 相关阅读:
    十一.SVM神经网络
    九.自组织竞争神经网络
    八.DBN深度置信网络
    七.RBM受限玻尔兹曼机
    六.随机神经网络Boltzmann(玻尔兹曼机)
    二十公里法则
    五.反馈(Hopfield)神经网络
    Python进行Android开发步骤
    django中的中间件机制和执行顺序
    简单的Python 火车抢票程序
  • 原文地址:https://www.cnblogs.com/chenbaoliang/p/7507224.html
Copyright © 2020-2023  润新知