关于力扣数组与字符串的学习

168 阅读1分钟

一.目标:1.熟悉一维数组的相关操作 2.能较为熟练的掌握二维数组 3.能熟练的使用字符串 二.学习重点。 1.二维数组 2.字符串 三.实现的功能。 1.给你一个整数数组 nums,请编写一个能够返回数组 “中心下标” 的方法。 数组 中心下标 是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和。 如果数组不存在中心下标,返回 -1 。如果数组有多个中心下标,应该返回最靠近左边的那一个。 代码: class Solution { public: int pivotIndex(vector& nums) { int sum=0; for(int j=0;j<nums.size();j++)sum+=nums[j]; for(int i=0,left_sum=0;i<nums.size();left_sum+=nums[i++]) if(left_sum==sum-left_sum-nums[i]) { return i; } return -1;

}

}; 截图: image.png 难点: 为了节约时间,需要考虑左求和*2+nums[i]=总和

2.给你一幅由 N × N 矩阵表示的图像,其中每个像素的大小为 4 字节。请你设计一种算法,将图像旋转 90 度。 不占用额外内存空间能否做到? 代码: public: void rotate(vector<vector>& matrix) { for(auto row=0;row<matrix.size();row++) { for(auto column=0;column<=row;column++){ swap(matrix[row][column],matrix[column][row]); } } for(int row=0;row<matrix.size();row++) { for(int column=0;column<matrix.size()/2;column++){ swap(matrix[row][column],matrix[row][matrix.size()-column-1]); } } } }; 截图: image.png 难点:算法的设计偏难,需要分Y轴对称和镜面对称。

3.编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 ""。 代码: class Solution { public: string longestCommonPrefix(vector& strs) { string a=""; bool x=true; if(strs.size()==0)return a; for(int i=0;i<strs[0].size();i++) { for(int j=0;j<strs.size();j++) { if(strs[0][i]!=strs[j][i]) { x=false; break;
}
} if(x) { a+=strs[0][i]; } } return a; }
}; 截图:

image.png 难点: 二重循环,横向比较,纵向比较。 四.学习心得 算法的的设计需要有良好的数学知识,和逻辑思维,需要良好的数学基础。