数组相关问题

题目描述:
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;
    }
    };
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值