数组

1.寻找数组的中心索引
给定一个整数类型的数组 nums,编写一个能够返回数组 “中心索引” 的方法。
中心索引:数组中心索引的左侧所有元素相加的和等于右侧所有元素相加的和。
如果不存在中心索引,返回 -1。如果有多个中心索引,返回最左边一个。

class Solution {
public:
    int pivotIndex(vector<int>& nums) {
        int sumLeft = 0;
        int sum = 0;
        for(int i=0; i<nums.size(); i++)
            sum += nums[i];
        for(int j=0; j<nums.size(); j++)
        {
          if(sumLeft*2 == sum - nums[j])
              return j;
            sumLeft += nums[j];
        }
        return -1;
    }
};

2.搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。假设数组中无重复元素。

class Solution {
public:
    int searchInsert(vector<int>& nums, int target) {
        int l = 0, r = nums.size();
        while(l < r) {
            int mid = l + r >> 1;
            if(nums[mid] == target) return mid; //最求简洁可以删除此行,追求时间可以加入此行
            nums[mid] < target ? l = mid + 1 : r = mid;
        }
        return l;
    }
};

3.旋转矩阵
由 N × N 矩阵表示的图像,每个像素的大小为 4 字节。设计一种算法,将图像旋转 90 度。不占用额外内存空间
[
[1,2,3],
[4,5,6],
[7,8,9]
],
使其变为:
[
[7,4,1],
[8,5,2],
[9,6,3]
]

class Solution {
public:
    void rotate(vector<vector<int>>& matrix) {
        int n = matrix.size();
        for (int i = 0; i < n / 2; ++i) {
            for (int j = 0; j < (n + 1) / 2; ++j) {
                int temp = matrix[i][j];
                matrix[i][j] = matrix[n - j - 1][i];
                matrix[n - j - 1][i] = matrix[n - i - 1][n - j - 1];
                matrix[n - i - 1][n - j - 1] = matrix[j][n - i - 1];
                matrix[j][n - i - 1] = temp;
            }
        }
    }
};
class Solution {
public:
    void rotate(vector<vector<int>>& matrix) {
        int n = matrix.size();
        auto matrix_new = matrix;
        for (int i = 0; i < n; ++i) {
            for (int j = 0; j < n; ++j) {
                matrix_new[j][n - i - 1] = matrix[i][j];
            }
        }
        matrix = matrix_new;
    }
};
全部评论

相关推荐

黑皮白袜臭脚体育生:春节刚过就开卷吗?哈基馆,你这家伙......
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务