跟着Datawhale重学数据结构与算法

数据结构和算法之前学过,现在跟着Datawhale重学一下,就当是监督自己学习,重新拾起来养成一个好的习惯,以后可以一直坚持下去。

开源链接:【 教程地址 】【电子网站

首先:

程序
算法
数据结构

数据结构是一种工具,算法是使用工具的方法,而程序设计就好比是干一件事情我必须要具备的两个因素:怎么干?和借助什么干?这两个问题我们需要解决。而如何选择这俩个使得我们干事情更省力更轻松才是最重要的,而这个对应了程序设计的时间复杂度和空间复杂度,也就体现出了数据结构和算法的精妙之处。

1.数据结构分类:

数据结构
逻辑结构
物理结构
集合:从属关系
线性:一对一
树形:一对多
图:多对多
顺序存储:连续存储单元
链式存储:任意存储单元,指针

强调的知识点:
1.顺序存储数据元素再内存中连续存放,通过下标访问元素;而链式存储数据元素在内存中可以不连续存储,通过指针连接在一起。
2.顺序存储与链式存储的优缺点:

顺序存储:
优点:快速通过下标访问元素,存储密度高,没有指针开销;
缺点:插入和删除需要移动大量的元素。效率较低;需要预先分配足够大的连续存储空间。
链式存储:
优点:插入删除效率高,只修改指针;可以动态分配内存,不需要预先知道存储大小。
缺点:访问元素需要顺序遍历,效率较低;存储密度低,需要额外的存储指针。

2.算法:
解决特定问题求解步骤的准确而完整的描述,在计算机中表现为一系列指令的集合,算法代表着用系统的方法描述解决问题的策略机制。
算法其实就是一系列的运算步骤,这些运算步骤可以解决特定的问题。除此之外,算法 应必须具备以下特性:
输入,输出,有穷性,特定性,可行性。
算法追求的目标有 5 个:正确性、可读性、健壮性、所需运行时间更少(时间复杂度更低)、占用内存空间更小(空间复杂度更低)。

3.算法复杂度

复杂度
时间复杂度
空间复杂度

在这里插入图片描述
要掌握的一些排序算法的复杂度:
在这里插入图片描述
空间复杂度
在这里插入图片描述
Leetcode练习题目
1.2235.两整数相加

class Solution {
public:
    int sum(int num1, int num2) {
        return num1+num2;
    }
};//跟hello word一样.....

2.1929.数组串联

class Solution {
public:
    vector<int> getConcatenation(vector<int>& nums) {
        //分析,知道输入个数,然后.....
        int n=nums.size();
        vector <int> ans(2*n);
        for(int i=0;i<n;i++){
            ans[i]=nums[i];
            ans[i+nums.size()]=nums[i];
        }
    return ans;
    }
};
};//没难度

3.0771. 宝石与石头

class Solution {
public:
    int numJewelsInStones(string jewels, string stones) {
        //遍历查找呗,哈希表最简单
        int a[128]={0};
        for(char i : jewels){
            a[i]=1;
        } 
        int ans=0;
        for(char i : stones){
            ans+=a[i];
        }
        return ans;
    }
};

4.1480 一维数组的动态和

class Solution {
public:
    vector<int> runningSum(vector<int>& nums) {
        //用一个寄存器存下来当前加和的值,加到下一个
        //先生成一个与nums相同大小的数组。
        vector<int> a(nums.size());
        a[0]=nums[0];
        for(int i=1;i<nums.size();i++){
            a[i] = a[i-1]+nums[i];
        }
    return a;
    }
};

5.0709. 转换成小写字母

class Solution {
public:
    string toLowerCase(string s) {
        //遍历->判断->改正 three step完成
        int n=s.size();
        for(int i=0;i<n;i++)
        {
            if (s[i]>='A' && s[i]<='Z'){
                s[i]='a'+ (s[i] - 'A');
            }
        }
    return s;
    }
};

6.1672. 最富有客户的资产总量

class Solution {
public:
    int maximumWealth(vector<vector<int>>& accounts) {
        //返回,行最大,直接暴力
        int flag=0;
        int b=0;
        int hang=accounts.size();
        for(int i=0;i<hang;i++){
            for(int j=0;j<accounts[i].size();j++){
                b=b+accounts[i][j];
            }
            flag=max(flag,b);
            b=0;
    //flag记录全局的最大值,b记录本行的最大值
        }
    return flag;
    }
};

在这里插入图片描述

参考资料:

[1] 【教程地址 】[电子网站]
[2]Hello 算法教程

感谢:DataWhale社区

  • 17
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值