当前位置:   article > 正文

数据结构基础训练_数据结构训练

数据结构训练

数据结构基础训练


学习平台

Leetcode

学习内容

数组与字符串

一、数组

集合一般被定义为:由一个或多个确定的元素所构成的整体。
集合有什么特性呢?
首先,集合里的元素类型不一定相同。
其次,集合里的元素没有顺序。

列表(又称线性列表)的定义为:是一种数据项构成的有限序列,即按照一定的线性顺序,排列而成的数据项的集合。如数组和链表。
列表的概念是在集合的特征上形成的,它具有顺序,且长度是可变的。

数组是列表的实现方式之一。
数组是列表的实现方式,它具有列表的特征,同时也具有自己的一些特征。
那么如何从宏观上区分列表和数组呢?这里有一个重要的概念:索引。
如下图:
如图

对数组的操作主要有:读取元素、查找元素、插入元素、删除元素。

例题:给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
你可以假设数组中无重复元素。
思路:二分查找
代码如下(C++):

class Solution {
public:
    int searchInsert(vector<int>& nums, int target) {
        int n = nums.size();
        int left=0,right=n;
        while(left<right)
        {
            int mid=left+(right-left)/2;
            if(nums[mid]>=target)
            {
                right=mid;
            }
            else
            {
                left=mid+1;
            }
        }
        return left;
    }
};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

测试用例
在这里插入图片描述

在这里插入图片描述

二、二维数组


例题:编写一种算法,若M × N矩阵中某个元素为0,则将其所在的行与列清零。
思路:第一次遍历记录下需要置0的行和列,第二次遍历置0。
代码如下(C#):

public class Solution {
    public void SetZeroes(int[][] matrix) {
        if(matrix == null || matrix.Length == 0 || matrix[0].Length == 0)
            return;
        int m = matrix.Length, n = matrix[0].Length;
        int[] rows = new int[m], columns = new int[n];
        // 第一次遍历
        for(int i = 0; i < m; i++){
            for(int j = 0; j < n; j++){
                if(matrix[i][j] == 0){
                    rows[i] = 1;
                    columns[j] = 1;
                }
            }
        }
        // 第二次遍历
        for(int i = 0; i < m; i++){
            for(int j = 0; j < n; j++){
                if(rows[i] == 1 || columns[j] == 1) matrix[i][j] = 0;
            }
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、字符串

字符串是由零个或多个字符组成的有限序列。一般记为 s = a1a2…an。它是编程语言中表示文本的数据类型。

例题:编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。
思路:以第一个字符串作为参考比较,直到某个字符不一样。
代码如下(C++):

class Solution {
public:
    string longestCommonPrefix(vector<string>& strs) {
        string s = "";
        int n = strs.size();
        if(n == 0)
            return s;
        if(n == 1)
            return strs[0];
        for(int j = 0;j<strs[0].size();j++){
            for(int i = 1;i<strs.size();i++)
            {
                if(strs[i][j]!=strs[0][j])
                    return s;
            }
            s+=strs[0][j];
        }
        return s;  
    }
};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


总结

这次学习让我进一步了解了数组和字符串。而且在Leetcode上看到了很多大佬,解题思路都很特别,很多代码都不能看太明白,以后要更加努力学习。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/243325
推荐阅读
相关标签
  

闽ICP备14008679号