0
点赞
收藏
分享

微信扫一扫

Leetcode 数组(一)

沪钢木子 2022-02-26 阅读 55

704. 二分查找

力扣题目链接

class Solution {
public:
    int search(vector<int>& nums, int target) {
        int left = 0;
        int right = nums.size() - 1;
        while(left <= right){
            int middle = left +(right - left) / 2;
            if(nums[middle] > target){
                right = middle - 1;
            }
            else if(nums[middle] < target){
                left = middle + 1;
            }
            else{
                return middle;
            }
        }
        return -1;
    }
};

27. 移除元素

力扣题目链接

class Solution {
public:
    int removeElement(vector<int>& nums, int val) {
        int length = nums.size();
        int slow = 0, fast = 0;
        while(fast < length){
            if(nums[fast] != val){
                nums[slow] = nums[fast];
                slow++;
            }
            fast++;
        }   
        return slow;    
    }
};

977. 有序数组的平方

力扣题目链接

class Solution {
public:
    vector<int> sortedSquares(vector<int>& nums) {
        int k = nums.size() - 1;
        vector<int> result(nums.size(), 0);
        for (int i = 0, j = nums.size() - 1; i <= j;) { 
            if (nums[i] * nums[i] < nums[j] * nums[j])  {
                result[k] = nums[j] * nums[j];
                k--;j--;
            }
            else {
                result[k] = nums[i] * nums[i];
                k--;i++;
            }
        }
        return result;
    }
};

209. 长度最小的子数组

力扣题目链接

class Solution {
public:
    int minSubArrayLen(int target, vector<int>& nums) {
        int result = INT32_MAX;
        int sum = 0;
        int start = 0;
        int sublength = 0;
        for(int end = 0; end < nums.size(); end++){
            sum += nums[end];
            while(sum >= target){
                sublength = end - start + 1;     
                result = min(result, sublength);
                sum -= nums[start];
                start++;
                }
        }     
        return result == INT32_MAX ? 0 : result;
    }
};

59. 螺旋矩阵 II

力扣题目链接

class Solution {
public:
    vector<vector<int>> generateMatrix(int n) {
        vector<vector<int>> res(n, vector<int>(n, 0));
        int startx = 0, starty = 0;
        int loop = n / 2;   //每个圈循环几次
        int mid = n / 2;
        int count = 1;
        int offset = 1;     //控制每一遍遍历长度
        int i,j;
        while(loop--){
            i = startx;
            j = starty;
            for(j = starty; j < starty + n - offset; j++){  //左到右
                res[startx][j] = count;
                count++;
            }
            for(i = startx; i < startx + n - offset; i++){  //上到下
                res[i][j] = count;
                count++;
            }
            for(; j > starty; j--){    //右到左
                res[i][j] = count;
                count++;
            }
            for(; i > startx; i--){     //下到上
                res[i][j] = count;
                count++;
            }
            startx++;
            starty++;
            offset += 2;
        }   
        if(n % 2){
            res[mid][mid] = count;
        }
        return res;
    }
};
举报

相关推荐

0 条评论