数据结构基础训练:数组和字符串
数组的操作
数组操作四种:
- 读取元素:从索引从0开始,内存连续。
- 查找元素:考虑最坏的情况 即所有元素不满足查找条件。
- 插入元素:分顺序存储式插入和链式存储插入。链式较方便。
- 删除元素:删除后的索引需要重新按新的元素来对应。
LC:寻找数组的中心索引
给你一个整数数组 nums,请编写一个能够返回数组 “中心下标” 的方法。
数组 中心下标 是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和。
如果数组不存在中心下标,返回 -1 。如果数组有多个中心下标,应该返回最靠近左边的那一个。
注意:中心下标可能出现在数组的两端。
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;
}
};
二维数组简介
二维数组a[i][j],可看作一维数组的元素为一维数组。大多时候用于矩阵的运算和操作。
LC 零矩阵
编写一种算法,若M × N矩阵中某个元素为0,则将其所在的行与列清零。
class Solution {
public:
void setZeroes(vector<vector<int>>& matrix) {
auto matrix_new = matrix;
int row = matrix.size();
int col = matrix[0].size();
for(int i = 0; i < row; ++i){
for(int j = 0; j < col; ++j){
if(matrix[i][j] == 0){
for(int m = 0; m < row; ++m){
matrix_new[m][j] = 0;
}
for(int p = 0; p < col; ++p){
matrix_new[i][p] = 0;
}
}
}
}
matrix = matrix_new;
}
};
字符串
字符串的特点:
1.字符串的基本操作对象通常是字符串整体或者其子串
2. 字符串操作比其他数据类型更复杂(例如比较、连接操作)
字符串比较函数:根据语言类型的不同有不同的字符串比较方法。
字符串连接操作:同上,依语言的不同有不同的连接操作。
LC 最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。
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;
}
};
学习心得:
编程不是个容易的事,学一门语言就要学得伸手就来,不然就相当于没学。