关于力扣数组与字符串的学习
一.目标
1.熟悉一维数组的相关操作
2.能较为熟练的掌握二维数组
3.能熟练的使用字符串
二.学习重点
1.二维数组
2.字符串
三.实现的功能
1.给你一个整数数组 nums,请编写一个能够返回数组 “中心下标” 的方法。
数组 中心下标 是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和。
如果数组不存在中心下标,返回 -1 。如果数组有多个中心下标,应该返回最靠近左边的那一个。
注意:中心下标可能出现在数组的两端。
测试用例
输入:nums = [1, 7, 3, 6, 5, 6]
输出:3
解释:
中心下标是 3 。
左侧数之和 (1 + 7 + 3 = 11),
右侧数之和 (5 + 6 = 11) ,二者相等。
class Solution {
public:
int pivotIndex(vector<int>& nums) {
if(nums.empty())
return -1;
int left_sum=0,right_sum=accumulate(nums.begin(), nums.end(), 0);
for(int i=0;i<nums.size();++i)
{
left_sum+=nums[i];
if(i>0)
right_sum-=nums[i-1];
if(left_sum==right_sum)
return i;
}
return -1;
}
};
2.编写一种算法,若M × N矩阵中某个元素为0,则将其所在的行与列清零。
测试用例
[[1,1,1],[1,0,1],[1,1,1]]
class Solution {
public:
void setZeroes(vector<vector<int>>& matrix) {
int r=matrix.size(),c=matrix[0].size();
unordered_set<int>zero_row,zero_col;
for(int i=0;i<r;++i)
for(int j=0;j<c;++j)
if(!matrix[i][j])
{
zero_row.insert(i);
zero_col.insert(j);
}
for(auto i:zero_row)
for(int j=0;j<c;++j)
matrix[i][j]=0;
for(auto j:zero_col)
for(int i=0;i<r;++i)
matrix[i][j]=0;
}
};
3.编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。
测试用例
[“flower”,“flow”,“flight”]
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
string s="";
if(strs.size()==0) return s;
for(int j=0;j<strs[0].size();j++){
bool flag=true;
for(int i=1;i<strs.size();i++){
if(strs[i][j]!=strs[0][j]){
flag=false;break;
}
}
if(flag)
s=s+strs[0][j];
else
break;
}
return s;
}
};