当前位置:   article > 正文

代码随想录训练营day2

代码随想录训练营day2

一、有序数组的平方 

1.1暴力解法

可以直接使用C++当时自带的排序算法库函数进行计算,属于暴力解法,复杂度较高,那么有没有运行效率更高的算法思想呢?

  1. class Solution {
  2. public:
  3. vector<int> sortedSquares(vector<int>& nums) {
  4. for(int i=0;i<nums.size();i++){
  5. nums[i]*=nums[i];
  6. }
  7. sort(nums.begin(),nums.end());
  8. return nums;
  9. }
  10. };
1.2双指针法
  1. class Solution {
  2. public:
  3. vector<int> sortedSquares(vector<int>& nums) {
  4. int k=nums.size()-1;
  5. int i,j;
  6. vector<int> result(nums.size(),0);
  7. for(i=0,j=nums.size()-1;i<=j;){
  8. if(nums[i]*nums[i]<nums[j]*nums[j]){
  9. result[k--]=nums[j]*nums[j];
  10. j--;
  11. }else{
  12. result[k--]=nums[i]*nums[i];
  13. i++;
  14. }
  15. }
  16. return result;
  17. }
  18. };

二、长度最小的子数组

2.1暴力解法:使用两层for循环进行运算

暴力解法确实可以进行运算,但是当测试的数组很多数字的时候,就超时了

  1. class Solution {
  2. public:
  3. int minSubArrayLen(int target, vector<int>& nums) {
  4. int result=INT32_MAX;
  5. int sum=0;
  6. int length=0;
  7. for(int i=0;i<nums.size();i++){
  8. sum=0;
  9. for(int j=i;j<nums.size();j++){
  10. sum+=nums[j];
  11. if(sum>=target){
  12. length=j-i+1;
  13. result=result<length?result:length;
  14. break;
  15. }
  16. }
  17. }
  18. return result==INT32_MAX?0:result;
  19. }
  20. };
2.2使用滑动窗口进行运算

在这里要格外注意为什么使用while(sum>target)而不是if(sum>target)来判断

  1. class Solution {
  2. public:
  3. int minSubArrayLen(int target, vector<int>& nums) {
  4. int result=INT32_MAX;
  5. int sum=0;
  6. int i=0;
  7. int j=0;
  8. int length=0;//子数组的长度
  9. for(j=0;j<nums.size();j++){
  10. sum+=nums[j];
  11. while(sum>=target){
  12. length=j-i+1;
  13. result=result<length?result:length;
  14. sum-=nums[i++];
  15. }
  16. }
  17. return result==INT32_MAX?0:result;
  18. }
  19. };

三、螺旋矩阵

在这里主要是我们要提前规定好怎么查询,有规律得查询才能不会发生错误的查询和排序

  1. class Solution {
  2. public:
  3. vector<vector<int>> generateMatrix(int n) {
  4. vector<vector<int>> res(n, vector<int>(n, 0));
  5. int startx=0;
  6. int starty=0;
  7. int count=1;
  8. int offset=1;
  9. int loop=n/2;
  10. int mid=n/2;
  11. int i=0,j=0;
  12. while(loop--){
  13. i=startx;
  14. j=starty;
  15. for(j=starty;j<n-offset;j++){
  16. res[i][j]=count++;
  17. }
  18. for(i=startx;i<n-offset;i++){
  19. res[i][j]=count++;
  20. }
  21. for(;j>startx;j--){
  22. res[i][j]=count++;
  23. }
  24. for(;i>startx;i--){
  25. res[i][j]=count++;
  26. }
  27. startx++;
  28. starty++;
  29. offset++;
  30. }
  31. if(n%2!=0){
  32. res[mid][mid]=count;
  33. }
  34. return res;
  35. }
  36. };

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/blog/article/detail/39750
推荐阅读
相关标签
  

闽ICP备14008679号