一.目标: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;
}
};
截图:
难点:
为了节约时间,需要考虑左求和*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]);
}
}
}
};
截图:
难点:算法的设计偏难,需要分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;
}
};
截图:
难点:
二重循环,横向比较,纵向比较。
四.学习心得
算法的的设计需要有良好的数学知识,和逻辑思维,需要良好的数学基础。