数据结构基础训练

124 阅读1分钟

这一次的学习主要目标是学会数组与字符串的应用,但是第一次接触力扣,我发现其上的教学与我平日里接触的完全不是一个等级,而且在大二上半学期接触的编程较少,导致现在我的编程能力较弱。

在这次数组与字符串的课程学习中,因为知识储备的不足,导致我遇到了许多问题,就例如寻找数组的中心索引这一题,这一题是要求编写一段能返回整数数组 nums“中心下标”的方法。

class Solution {
public:
    int pivotIndex(vector<int>& nums) {  

        for(int i=0;i<nums.size();i++)
        {
            int left=0,right=0;
            for(int j=0;j<i;j++){
        		left+=nums[j];
            }
            for(int j=i+1;j<nums.size();j++){
                right+=nums[j];
            }
            if(left==right)
                return i;
        }
        return -1;
    }
};

image.png

在编写这段程序时,我因为知识的遗忘和不健全遇到了许多问题,甚至因为left和right的定义位置而困惑了许久,这道题最主要的难点是在于right的运算,right的运算我想出了好几种方法,比如先把数组总和赋值给right,再通过left加同时right减来比较,还有就是这段代码中的方法。

因为遗忘,导致我在字符串的教程中一头雾水,只能根据给的解答来一步步的探索,如编写一个函数来查找字符串数组中的最长公共前缀一题。

class Solution {
public:
    string longestCommonPrefix(vector<string>& strs) {
        if (!strs.size()) {
            return "";
        }
        int length = strs[0].size();
        int count = strs.size();
        for (int i = 0; i < length; ++i) {
            char c = strs[0][i];
            for (int j = 1; j < count; ++j) {
                if (i == strs[j].size() || strs[j][i] != c) {
                    return strs[0].substr(0, i);
                }
            }
        }
        return strs[0];
    }
};

image.png

这一节的难点在于字符串和数组的融合应用,尤其是在数组的定义上。

经过这次学习,充分暴露了我知识储备的不足与短板,所以在以后的学习中应该多要多动手,不能再拘泥于课本上的理论知识了,通过力扣来提升自己的动手能力。