2020-02-07 刷题 2(数组)

2020-02-07  本文已影响0人  nowherespyfly

66 加一

思路很简单,从后向前扫描,如果当前位小于9,就加一然后退出循环,否则置零继续向前循环。最后判断一下第一位是不是0,是的话就在最前面插入1.
代码:

time: 79.93%, memory:5.37%
class Solution {
public:
vector<int> plusOne(vector<int>& digits) {
    int dig_len = digits.size();
    for(int i = dig_len - 1; i >= 0; i--){
        if (digits[i] < 9){
            digits[i]++;
            break;
        }
        else
            digits[i] = 0;
    }
    if (digits[0] == 0)
        digits.insert(digits.begin(), 1);
    return digits;
}
};

283 移动零

题目要求将所有0移动到数组最后,其实可以反过来将不是0的移动到前面,最后将剩下的空置零。采用双指针法,一个记录当前非零数已经填充到哪里,一个记录当前扫描到哪里。
标签: 数组,双指针
代码:

time: 94.83%, memory: 5.03%
class Solution {
public:
void moveZeroes(vector<int>& nums) {
   int num_len = nums.size();
   int p = 0, q = 0;
   // move other elements to front
   for(;q < num_len; q++){
       if(nums[q] != 0){
           nums[p] = nums[q];
           p++;
       }
   }
   while(p < num_len){
       nums[p] = 0;
       p++;
   }
}
};
上一篇下一篇

猜你喜欢

热点阅读