array easy

Array(easy)

1. Two Sum

class Solution

{

public:

    vector<int>twoSum(vector<int>& nums, int target)

    {

        vector<int> vec;

        map<int,int> index;

        for(int i=0;i<nums.size();i++)

        {

           if(index.find(target-nums[i])!=index.end())

           {

               vec.push_back(index[target-nums[i]]);

               vec.push_back(i);

               break;

           }

           index[nums[i]]=i;

        }

        return vec;

    }

};

 

26. Remove Duplicates from Sorted Array

class Solution {

public:

    int removeDuplicates(vector<int>&nums)

    /*{

        if(nums.size()<=1)

           return nums.size();

        int length=1;

        for(int i=1;i<nums.size();i++)

        {

            if(nums[i]!=nums[i-1])

            {

                nums[length++]=nums[i];

            }

        }

        return length;

    }*/

    {

        if(nums.size()<=1)

           return nums.size();

        int pos=0;

        int j=1;

        for(j=1;j<nums.size();j++)

        {

            if(nums[j]!=nums[pos])

            {

                pos++;

                nums[pos]=nums[j];

            }

        }

        return pos+1;

    }

};

27. Remove Element

class Solution {

public:

    int removeElement(vector<int>&nums, int val)

    {

        int length=nums.size();

        if(length==0)

            return length;

        if(length==1)

        {

            if(nums[0]==val)

                return 0;

            else

                return length;

        }

        int j;

        int pos=0;

        for(j=0;j<length;j++)

        {

            if(nums[j]!=val)

            {

                nums[pos]=nums[j];

                pos++;

            }

 

        }

        return pos;

    }

35. Search Insert Position

class Solution {

public:

    int searchInsert(vector<int>&nums, int target)

    {

        int length=nums.size();

        int low=0;

        int high=length-1;

        while(low<=high)

        {

            int mid=(low+high)/2;

            if(target>nums[mid])

            low=mid+1;

            else if(target<nums[mid])

            high=mid-1;

            else

            return mid;

        }

        return low;

    }

};

53. Maximum Subarray

动态规划

class Solution {

public:

    int maxSubArray(vector<int>&nums)

    /*{

      int max=nums[0];

      int sum=0;

      for(int i=0;i<nums.size();i++)

      {

          sum+=nums[i];//必须从nums[0]开始加,如果nums[0]小于0,则后面判断时舍

          if(sum>max)

              max=sum;

          if(sum<0)

              sum=0;

      }

      return max;

    }*/

};

分治法

class Solution {

public:

    int maxSubArray(vector<int>&nums)

    {

        returndivideconquer(nums,0,nums.size()-1);

    }

    int divideconquer(vector<int>&a,int left,int right)

       {

              if (left == right)

                     return a[left];     //注意递归终止条件

              int middle = (left + right) / 2;

              int leftans = divideconquer(a,left, middle);  //计算左区间和右区间 

              int rightans = divideconquer(a,middle+1, right);

              //middle从中间向两遍扫

              int leftmax = a[middle];   

              int rightmax = a[middle+1];

              int temp=0;

              for (int i = middle; i >= left;i--)

              {

                     temp += a[i];

                     if(temp>leftmax)

                         leftmax = temp;

              }

              temp = 0;

              for (int i = middle+1; i <=right; i++)

              {

                     temp += a[i];

                     if(temp>rightmax)

                         rightmax=temp;

              }

              return max(max(leftans, rightans),leftmax + rightmax);

       }

};66. Plus One

class Solution {

public:

    vector<int>plusOne(vector<int>& digits)

    {

        int c=1;

        for(int i=digits.size()-1;i>=0;i--)

        {

           int temp=digits[i]+c;

           digits[i]=temp%10;

           c=temp/10;

        }

        if(c==1)

       {

         digits.insert(digits.begin(),1);

        }

        return digits;   

    }

};

88. Merge Sorted Array

class Solution {

public:

    void merge(vector<int>& nums1,int m, vector<int>& nums2, int n)

    {

        int i=m-1;

        int j=n-1;

        int k=m+n-1;

        while(i>=0&&j>=0)

        {

            if(nums1[i]>nums2[j])

            nums1[k--]=nums1[i--];

            else

            nums1[k--]=nums2[j--];

        }

        while(j>=0)

        {

            nums1[k--]=nums2[j--];

        }

    }

};

118. Pascal's Triangle

class Solution {

public:

    vector<vector<int>>generate(int numRows)

    {

        int i=0,j=0;

        vector<vector<int>> allvec;

        for(int i=0;i<numRows;i++)

        {

             vector<int> vec;

            for(int j=0;j<=i;j++)

            {

                if(j==0||i==j)

                    vec.push_back(1);

                else

                   vec.push_back(allvec[i-1][j-1]+allvec[i-1][j]);

            }

            allvec.push_back(vec);

        }

        return allvec;

    }

};119. Pascal's Triangle II

class Solution {

public:

    vector<int> getRow(int rowIndex)

    {

        vector<int> vec;

        for(int i=0;i<=rowIndex;i++)

        {

            vec.push_back(1);

            for(int j=i-1;j>0;j--)

                vec[j]=vec[j-1]+ vec[j];

        }

        return vec;

   

       

    }

};

121. Best Time to Buy and Sell Stock

class Solution {

public:

    int maxProfit(vector<int>&prices)

    {

        int size=prices.size();

        int min=0,max=0;

        for(int i=0;i<size;i++)

        {

            if(prices[i]<prices[min])

                 min=i;

            if(max<prices[i]-prices[min])

                max=prices[i]-prices[min];

        }

        return max;

       

    }

};

122. Best Time to Buy and Sell Stock II

class Solution {

public:

    int maxProfit(vector<int>&prices)

    {

        int summax=0;

        for(int i=1;i<prices.size();++i)

        {

         if(prices[i]>prices[i-1])

             summax+=prices[i]-prices[i-1];

        }

        return summax;

       

    }

};

 

 

 

class Solution {

public:

    int maxProfit(vector<int>&prices)

    {

        int sum=0;

        int size=prices.size();

        for(int i=0;i<size-1;i++)

        {

            if(prices[i+1]>prices[i])

                sum+=(prices[i+1]-prices[i]);

        }

        return sum;

       

    }

};

136. Single Number

class Solution {

public:

    int singleNumber(vector<int>&nums)

    /*{

        int result=0;

        for(int i=0;i<nums.size();i++)

        {

            result^=nums[i];

        }

        return result;

 

    }*/

    {

        set<int> temp;

        for(int i=0;i<nums.size();i++)

        {

            set<int>::iteratorresult=temp.find(nums[i]);

            if(result==temp.end())

                temp.insert(nums[i]);

            else

                temp.erase(nums[i]);

        }

        return *temp.begin();  //*temp.begin()set的第一个元素

    }

};

167. Two Sum II - Input array is sorted

class Solution {

public:

    vector<int>twoSum(vector<int>& numbers, int target)

    {

        vector<int> vec;

        int i=0,j=numbers.size()-1;

        while(i!=j)

        {

              if(numbers[i]+numbers[j]==target)

              {

                  vec.push_back(i+1);

                  vec.push_back(j+1);

                  break;

              }

              elseif(numbers[i]+numbers[j]<target)

                  i++;

              else

                  j--;

          }

        return vec;

    }

};

169. Majority Element

class Solution {

public:

    int majorityElement(vector<int>&nums)

    /*{

        map<int,int> im;

        for(int i=0;i<nums.size();i++)

        {

            map<int,int>::iteratorit=im.find(nums[i]);

            if(it==im.end())

                im[nums[i]]=1;

            else

               im[nums[i]]++;

            if(im[nums[i]]>nums.size()/2)

                return nums[i];

        }

    }*/

    {

        int major;

        int cnt=0;

        int i=0;

        for(int i=0;i<nums.size();i++)

        {

            if(cnt==0)

            {

               major=nums[i];

               cnt=1;

            }

            else

            {

                major==nums[i]?cnt++:cnt--;

            }

        }

        return major;

    }

};

 

 

 

 

class Solution {

public:

    int majorityElement(vector<int>&nums)

    {

        map<int,int> index;

        int n=nums.size();

        for(int i=0;i<n;i++)

            index[nums[i]]++;

        map<int,int>::iterator it;

       for(it=index.begin();it!=index.end();it++)

        {

            if(it->second>n/2)

                return it->first;

        }

   

    }

};

189. Rotate Array

class Solution {

public:

    void rotate(vector<int>& nums,int k)

    /*{

        if(nums.size()==1) return;

        if(k>nums.size()) k%=nums.size();

        vector<int> vec;

        for(inti=nums.size()-k;i<nums.size();i++)

        {

            vec.push_back(nums[i]);

        }

       for(int i=0;i<nums.size()-k;i++)

        {

            vec.push_back(nums[i]);

        }

        nums=vec;

    }*/

   

    /*{

      k%=nums.size();

      if(k==0) return;

      int *temp=new int[nums.size()];

     memcpy(temp,&nums[0]+(nums.size()-k),sizeof(int)*k);

     memcpy(temp+k,&nums[0],sizeof(int)*(nums.size()-k));

      memcpy(&nums[0], temp,sizeof(int)*(nums.size())); 

      delete[] temp;

    } */

    {

        int n=nums.size();

        k%=n;          //1234567

        reverse(nums,0,n-1);//7654321

        reverse(nums,0,k-1);//5674321

        reverse(nums,k,n-1);//5671234

        return;

    }

    void reverse(vector<int>& arr,intstart,int end)

    {

        int i=start;

        int j=end;

        int temp;

        for(i,j;i<j;i++,j--)

        {

            temp=arr[i];

            arr[i]=arr[j];

            arr[j]=temp;

        }

       return;

    }

   

};

217. Contains Duplicate

class Solution {

public:

    boolcontainsDuplicate(vector<int>& nums)

    /*{

        map<int,int>index;

        for(int i=0;i<nums.size();i++)

        {

            if(index.count(nums[i]))

                return true;

            index[nums[i]]=1;

        }

        return false;

    }*/

    /*{

        set<int>s(nums.begin(),nums.end());

        if(s.size()!=nums.size())

        return true;

        else

        return false;

    }*/

    {

        sort(nums.begin(),nums.end());

       if(unique(nums.begin(),nums.end())!=nums.end())

        return true;

        else

        return false;

    }

};

 

 

 

class Solution {

public:

    boolcontainsDuplicate(vector<int>& nums)

    {

        map<int,int> index;

        for(int i=0;i<nums.size();i++)

            index[nums[i]]++;

        map<int,int>::iteratorit=index.begin();

        for(;it!=index.end();it++)

        {

            if(it->second>=2)

                return true;

        }

        return false;

    }

};

 

 

219. Contains Duplicate II

class Solution {

public:

    boolcontainsNearbyDuplicate(vector<int>& nums, int k)

    {

        map<int,int> index;

        int j;

        for(int i=0;i<nums.size();i++)

        {

           if(index.find(nums[i])!=index.end()&&(i-index[nums[i]])<=k)

            {

                   return true;

            }

            index[nums[i]]=i;

 

        }

        return false;

    }

};

268. Missing Number

class Solution {

public:

    int missingNumber(vector<int>&nums)

    {

        intresult=(1+nums.size())*nums.size()/2;

        for(int i=0;i<nums.size();i++)

        {

           result-=nums[i];

        }

        return result;

    }

};

283. Move Zeroes

class Solution {

public:

    void moveZeroes(vector<int>&nums)

    {

        int pos=0;

        for(int i=0;i<nums.size();i++)

        {

            if(nums[i]!=0)

            {

                nums[pos]=nums[i];

                pos++;

            }

        }

        for(int i=pos;i<nums.size();i++)

        {

            nums[i]=0;

        }

    }

};

414. Third Maximum Number

class Solution {

public:

 /* //注意这里有个坑,就是初始化要用长整型long的最小值,否则当数组中有INT_MIN存在时,程序就不知道该返回INT_MIN还是最大值first

    int thirdMax(vector<int>& nums)

    {

        longfirst=LONG_MIN,second=LONG_MIN,third=LONG_MIN;

        for(int num:nums)

        {

            if(num>first)

            {

                third=second;

                second=first;

                first=num;

            }

            elseif(num>second&&num<first)

            {

                third=second;

                second=num;

            }

            elseif(num>third&&num<second)

                third=num;

        }

        return(third==LONG_MIN||third==second)?first:third;

    }

    */

    //时间复杂度是O(nlogn),不符合题目要求,纯粹是拓宽下思路哈,利用了set的自动排序和自动去重复项的特性,很好的解决了问题,对于遍历到的数字,加入set中,重复项就自动去掉了,如果此时set大小大于3个了,那么我们把set的第一个元素去掉,也就是将第四大的数字去掉,那么就可以看出set始终维护的是最大的三个不同的数字,最后遍历结束后,我们看set的大小是否为3,是的话就返回首元素,不是的话就返回尾元素

    int thirdMax(vector<int>& nums)

    {

        set<int> s;

        for(int num:nums)

        {

            s.insert(num);

            if(s.size()>3)

            {

                s.erase(s.begin());

            }

        }

        return s.size()==3?*s.begin():*s.rbegin();

    }

 

};

 

448. Find All Numbers Disappeared in an Array

class Solution {

public:

    vector<int>findDisappearedNumbers(vector<int>& nums)

    {

        vector<int> vec;

        for(int i=0;i<nums.size();i++)

        {

            if(nums[abs(nums[i])-1]>0)

            nums[abs(nums[i])-1]=-nums[abs(nums[i])-1];

        }

        for(int i=0;i<nums.size();i++)

        {

            if(nums[i]>0)

                vec.push_back(i+1);

        }

        return vec;

    }

};

485. Max Consecutive Ones

class Solution {

public:

    intfindMaxConsecutiveOnes(vector<int>& nums)

    {

        int max=0;

        int count=0;

        for(int i=0;i<nums.size();i++)

        {

                if(nums[i]==1)

                {

                    count++;

                    if(count>max)

                        max=count;

                }

                else

                {

                    count=0;

                }

        }

        return max;

       

    }

};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值