661图片平滑器
class Solution { public: vector<vector<int>> imageSmoother(vector<vector<int>>& img) { int m=img.size();//行数 int n=img[0].size();//列数 vector<vector<int>>v(m,vector<int>(n));//记录答案 for(int i=0;i<m;i++)//遍历二维数组 { for(int j=0;j<n;j++) { int sum=0; int count=0;//九宫格内存在的元素个数 for(int a=-1;a<=1;a++)//检查当前数字的九宫格存在元素的 { for(int b=-1;b<=1;b++) { int x=a+i;//偏移 int y=b+j; if(x>=0&&x<m&&y>=0&&y<n) { sum+=img[x][y]; count++; } } } v[i][j]=sum/count; } } return v; } };
674最长连续递增序列
class Solution { public: int findLengthOfLCIS(vector<int>& nums) { int n = nums.size();//数组长度 int num = 1;//连续最长长度,只有一个数据本身也算一个长度 int a=1;//当前连续长度 for(int i = 1; i < n; i++) { if(nums[i]>nums[i-1]) { a++; num=max(a,num); } else { a=1; } } return num; } };
682棒球比赛
class Solution { public: int calPoints(vector<string>& operations) { vector<int>v;//记录数组中的数据 for(int i=0;i<operations.size();i++) { if(operations[i]=="+") { int tail=v.back();//获取存放数据数组最后一个值 v.pop_back();//删除最后一个值 int sum=tail+v.back();//将现在数据数组最的最后两个数据相加 v.push_back(tail);//放回数组值 v.push_back(sum);//将两数相加值放入数组 } else if(operations[i]=="C") { v.pop_back();//删除上一次得分 } else if(operations[i]=="D") { int tail=v.back();//获取上次得分 v.push_back(tail*2);//将得分乘2后加入到数组 } else { v.push_back(stoi(operations[i]));//将数据由string转为int } } int m=v.size(); int num=0;//所有数据数组和 for(int i=0;i<m;i++) { num+=v[i]; } return num; } };
697数组的度
class Solution { public: int findShortestSubArray(vector<int>& nums) { //哈希表(对应数字,出现次数,出现首位置,末位置) //记录度相同的数 //循环判断如果出现和度相同的值,比较谁的下标大用最大的减最小的。 unordered_map<int, int> count; // 出现次数 unordered_map<int, int> first; // 首次出现下标 unordered_map<int, int> last; // 次出现下标 for (int i = 0; i < nums.size(); i++) { int num = nums[i];//记录当前数 count[num]++;// 统计次数 if (first.find(num) == first.end())// 在first中查找当前数字是否出现过如果没出现过记录首次下标 { first[num] = i; } last[num] = i;//数字每刷新一次对应数字下标也一起更新 } int max_degree = 0;//最大度 for (auto& pair : count) { max_degree = max(max_degree, pair.second); } int min_len = INT_MAX;//最短长度 for (auto& pair : count) { int num = pair.first;//当前数字 if (pair.second == max_degree)//当前数字度等于最大度 { int cur_len = last[num] - first[num] + 1;//末次下标 - 首次下标 + 1 min_len = min(min_len, cur_len); } } return min_len; } };
704二分查找
class Solution { public: int search(vector<int>& nums, int target) { int n=nums.size(); int left=0;//左指针 int right=n-1;//右指针 while(left<=right)//左指针一定小于等于右指针 { int mid =left+(right-left);//中间下标 if(nums[mid]==target) { return mid; } else if(nums[mid]<target)//如果中间值小于目标值将左指针向右挪 { left=left+1; } else//如果中间值大于目标值将左指针向右挪 { right=right-1; } } return -1; } };