zoukankan      html  css  js  c++  java
  • two sum

    //method 1: quick sort + Loop
    
    //beat 89%
    
    void quickSort(vector<int> &nums,int iLeft,int iRight,int *arrIndex){
    
        if(iLeft>=iRight)
    
            return;
    
        int idxRand = rand()%(iRight-iLeft+1) + iLeft;
    
        int idxRand_Index = arrIndex[idxRand];
    
        int iPivot = nums[idxRand];
    
        
    
        nums[idxRand] = nums[iLeft];
    
        arrIndex[idxRand] = arrIndex[iLeft];
    
        
    
        int iBegin = iLeft;
    
        int iEnd = iRight;
    
        while(iBegin<iEnd){
    
            while(iBegin<iEnd && nums[iEnd]>=iPivot)
    
                iEnd--;
    
            nums[iBegin] = nums[iEnd];
    
            arrIndex[iBegin] = arrIndex[iEnd];
    
            
    
            while(iBegin<iEnd && nums[iBegin]<=iPivot)
    
                iBegin++;
    
            nums[iEnd] = nums[iBegin];
    
            arrIndex[iEnd] = arrIndex[iBegin];
    
        }
    
        nums[iBegin] = iPivot;
    
        arrIndex[iBegin] = idxRand_Index;
    
        
    
        quickSort(nums,iLeft,iBegin-1,arrIndex);
    
        quickSort(nums,iBegin+1,iRight,arrIndex);
    
    }
    
    
    
    vector<int> twoSum(vector<int>& nums, int target) {
    
        vector<int> retArr;
    
        
    
        //sort
    
        int *arrIndex = (int *)malloc(sizeof(int)*nums.size());
    
        for(int iLoop=0;iLoop<nums.size();iLoop++){
    
            arrIndex[iLoop]=iLoop;
    
        }
    
        quickSort(nums,0,nums.size()-1,arrIndex);
    
        
    
        //search
    
        int iLeft = 0;
    
        int iRight = nums.size()-1;
    
        while(iLeft<iRight){
    
            int sum = nums[iLeft]+nums[iRight];
    
            if(sum==target)
    
            {
    
                retArr.push_back(arrIndex[iLeft]+1);
    
                retArr.push_back(arrIndex[iRight]+1);
    
                break;
    
            }
    
            else if(sum<target)
    
                iLeft++;
    
            else //sum>target
    
                iRight--;
    
        }
    
        
    
        
    
        free(arrIndex);
    
        sort(retArr.begin(),retArr.end());
    
        return retArr;
    
    }
    
    
    
    //method 2: use std::map<int,int>
    
    //beat 25%
    
    vector<int> twoSum1(vector<int>& nums, int target) {
    
        map<int,int> m;
    
        vector<int> retVec;
    
        for(int iLoop = 0;iLoop < nums.size();iLoop++){
    
            auto itr= m.find(target-nums[iLoop]);
    
            if(itr==m.end()){
    
                m[nums[iLoop]] = iLoop;
    
            }
    
            else
    
            {
    
                retVec.push_back(itr->second+1);
    
                retVec.push_back(iLoop+1);
    
                break;
    
            }
    
        }
    
        return retVec;
    
    }
    

      

  • 相关阅读:
    使用Eolinker拓展API设计
    如何记录API
    API设计
    【翻译】通过API主导的集成来证明您的业务未来
    从状态库迁移分布系统建设方式
    PostgreSql 查询某个模式下面的所有表
    迁移状态库的地市区县信息
    测开和开发的难度对比
    yum源的三种搭建方式
    Harbor实现容器镜像仓库的管理和运维
  • 原文地址:https://www.cnblogs.com/dongfangchun/p/7200654.html
Copyright © 2011-2022 走看看