题目: 解答: 设置双指针 如果右指针 r 是奇数,指针往右走 否则与左指针 l 交换一次 移动左指针 l 1 class Solution { 2 public: 3 vector<int> sortArrayByParity(vector<int>& A) 4 { 5 int l = 0; 6 ...
分类:
编程语言 时间:
2020-05-04 19:48:57
阅读次数:
69
题目: 解答: 如果数组单调则所有相邻两值的差必须都同号。 1 class Solution { 2 public: 3 bool isMonotonic(vector<int>& A) 4 { 5 //两相邻值的差 6 int sub=0; 7 for (int i = 1; i < A.size ...
分类:
编程语言 时间:
2020-05-04 19:42:20
阅读次数:
76
题目: 解答: 1 class Solution { 2 public: 3 vector<vector<int>> transpose(vector<vector<int>>& A) 4 { 5 int ro = A.size(); 6 int co = A[0].size(); 7 8 vect ...
分类:
编程语言 时间:
2020-05-04 19:41:40
阅读次数:
66
题目: 解答: 思路:滑动窗口。 每个(连续)增加的子序列是不相交的,并且每当 nums[i-1]>=nums[i] 时,每个此类子序列的边界都会出现。当它这样做时,它标志着在 nums[i] 处开始一个新的递增子序列,我们将这样的 i 存储在变量 anchor 中。例如,如果 nums=[7,8, ...
分类:
编程语言 时间:
2020-05-04 19:32:43
阅读次数:
71
题目: 解答: 方法一:双指针。 在找到一个偶数位是奇数的前提下,找奇数位上的偶数,找到之后在交换。 1 class Solution { 2 public: 3 vector<int> sortArrayByParityII(vector<int>& A) 4 { 5 int j = 1; 6 f ...
分类:
编程语言 时间:
2020-05-04 19:32:24
阅读次数:
70
题目: 解答: 方法一:累计求和 为了获得长度为 kk 的子数组的平均值,我们需要知道这 kk 个元素之和。使用 sumsum 记录数组的累加和,sum[i]sum[i] 存储从第一个元素到第 ii 个元素之和。该数组只需要计算一次。 在数组 sumsum 中,原数组索引从 ii 到 i+ki+k ...
分类:
编程语言 时间:
2020-05-04 19:26:39
阅读次数:
67
题目: 解答: sumLeft + sumRight + nums[p] = sumTotal;sumLeft = sumRight可以得出 sumLeft * 2 + nums[p] = sumTotal; 1 class Solution { 2 public: 3 int pivotIndex ...
分类:
编程语言 时间:
2020-05-04 19:22:58
阅读次数:
46
题目: 解答: 方法一:线性扫描。 我们从数组的最左侧开始扫描,直到找到第一个不满足 A[i] < A[i + 1] 的 i,那么 i 就是这个数组的最高点。如果 i = 0 或者不存在这样的 i(即整个数组都是单调递增的),那么就返回 false。否则从 i 开始继续扫描,判断接下来的的位置 j ...
分类:
编程语言 时间:
2020-05-04 19:20:18
阅读次数:
63
题目: 解答: 设置 one、two 表示最大值和第二大值的数字; 设置 oneIndex 表示最大值的索引; 通过 for 遍历 nums; 遍历 nums 过程中:如果这个数 nums[i] 比最大值还大,那么替换掉 two、one、oneIndex;如果这个数 nums[i] 比第二大值还大, ...
分类:
编程语言 时间:
2020-05-04 19:17:28
阅读次数:
75
题目: 解答: 方法一:排序。 我们将数组进行升序排序,如果数组中所有的元素都是非负数,那么答案即为最后三个元素的乘积。 如果数组中出现了负数,那么我们还需要考虑乘积中包含负数的情况,显然选择最小的两个负数和最大的一个正数是最优的,即为前两个元素与最后一个元素的乘积。 上述两个结果中的较大值就是答案 ...
分类:
编程语言 时间:
2020-05-04 19:15:50
阅读次数:
67