数据结构基础训练

数据结构基础训练:数组和字符串

数组的操作

数组操作四种:

  1. 读取元素:从索引从0开始,内存连续。
  2. 查找元素:考虑最坏的情况 即所有元素不满足查找条件。
  3. 插入元素:分顺序存储式插入和链式存储插入。链式较方便。
  4. 删除元素:删除后的索引需要重新按新的元素来对应。

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;
    }
};

在这里插入图片描述
学习心得:
编程不是个容易的事,学一门语言就要学得伸手就来,不然就相当于没学。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值