數組相關問題

題目描述:
Given a number represented as an array of digits, plus one to the number.
給你一個用數組表示的數,求加一之後的結果,結果還是用數組表示
解題思路:

  • 當前位不等於9,只用把數字+1
  • 當前位等於9,看下一位,直到找到不爲9的數字,將當前位+1,再把後面所有數字設爲0
  • 如果最高位也從9變成0,就return一個大小爲digits.length+1的array,array[0]=1
    代碼實現:

    class Solution {
    public:
        vector<int> plusOne(vector<int> &digits) {
            int size=digits.size();
            int i=0;
            for(i=size-1;i>=0;--i)
            {
                if(digits[i]!=9)
                {
                    digits[i]++;
                    return digits;
                }
                else{
                    digits[i]=0;
                }
            }
            //各位全是0
            if(i<0)
            {
                digits.insert(digits.begin(),1);
            }
            return digits;
        }
    };
    

2、給定一個排序的整數數組,找到給定目標值的起始位置和結束位置。

題目要求:
您的算法的運行時複雜度必須是O(log n)的順序。
如果在數組中找不到目標,返回[-1,-1 ]。
解題思路:

  • 定義前後兩個指針
  • 採用二分查找的方法查找目標元素
  • 並進行比較,若相等,將下標保存
  • 不相等,繼續查找,若還未找到就將-1保存入vector中
    代碼實現:

    class Solution {
    public:
        vector<int> searchRange(int A[], int n, int target) {
            int left=0;
            int right=n-1;
            vector<int> res;
            res.push_back(-1);
            res.push_back(-1);
    
        while(left<=right)
        {
            //找到了就將下標存起來
            if(A[left]==target&&A[right]==target)
            {
                res[0]=left;
                res[1]=right;
                break;
            }
            else
            {//二分查找遍歷數組
                int mid=left+((right-left)>>1);
                if(A[mid]<target)
                    left=mid+1;
                else if(A[mid]>target)
                    right=mid-1;
                else{
                    if(A[right]==target)
                        ++left;
                    else
                        --right;
                }
            }
      }
        return res;
    }
    };
    
發佈了115 篇原創文章 · 獲贊 74 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章