- 给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。
- 不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
class Solution {
public:int removeDuplicates(vector<int>& nums) {if(nums.size() == 0) return 0;int slow = 0;int fast = 1;while(fast < nums.size()){if(nums[fast] != nums[slow]){slow++;nums[slow] = nums[fast];}fast++;}return slow+1;}
};
给定 n
个非负整数表示每个宽度为 1
的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。
#include <vector>
#include <algorithm>
#include <iostream>using namespace std;class Solution {
public:int trap(vector<int>& height) {if (height.empty()) return 0; // 如果数组为空,直接返回0int n = height.size();// 计算左边最大高度vector<int> left_max(n);left_max[0] = height[0];for (int i = 1; i < n; ++i) {left_max[i] = max(left_max[i - 1], height[i]);}// 计算右边最大高度vector<int> right_max(n);right_max[n - 1] = height[n - 1];for (int i = n - 2; i >= 0; --i) {right_max[i] = max(right_max[i + 1], height[i]);}// 计算每个柱子能够接的水量int water = 0;for (int i = 0; i < n; ++i) {// 当前柱子接的水量是左边和右边的最大值与当前柱子高度的差water += min(left_max[i], right_max[i]) - height[i];}return water;}
};// 示例测试
int main() {Solution sol;vector<int> height = {0,1,0,2,1,0,1,3,2,1,2,1};cout << "Trapped water: " << sol.trap(height) << endl; // 输出结果: 6return 0;
}