数据结构与算法学习task01

点点圈 提交于 2020-01-06 19:50:59

​​Task01:数组(1天)

理论部分

理解数组的存储与分类。
实现动态数组,该数组能够根据需要修改数组的长度。
练习部分

1. 利用动态数组解决数据存放问题

编写一段代码,要求输入一个整数N,用动态数组A来存放2~N之间所有5或7的倍数,输出该数组。

示例:

输入:
N = 100 

输出:
5 7 10 14 15 20 21 25 28 30 35 40 42 45 49 50 55 56 60 63 65 70 75 77 80 84 85 90 91 95 98 100

采用matlab代码编写(就是图个方便)


function result=task01(n)
result = [];
for i =2:n+1
    if mod(i,5)==0||mod(i,7)==0
         result=[result i];
    end
end
​结果如下图所示: 

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

2. 托普利茨矩阵问题

如果一个矩阵的每一方向由左上到右下的对角线上具有相同元素,那么这个矩阵是托普利茨矩阵。

给定一个M x N的矩阵,当且仅当它是托普利茨矩阵时返回True。

示例:

​
输入:
matrix = [
  [1,2,3,4],
  [5,1,2,3],
  [9,5,1,2]
]

输出: True

解释:
在上述矩阵中, 其对角线为: "[9]", "[5, 5]", "[1, 1, 1]", "[2, 2, 2]", "[3, 3]", "[4]"。 各条对角线上的所有元素均相同, 因此答案是True。

代码如下:

​function bool=toplici(M)
[a,b]=size(M);
for i=1:a-1
    for j=1:b-1
        if M(i,j) ~= M(i+1,j+1)
            bool = 'false ';
        else
            bool = 'true ';
        end
    end
end

结果如下图所示:
在这里插入图片描述

3. 三数之和

https://leetcode-cn.com/problems/3sum/

给定一个包含 n 个整数的数组nums,判断nums中是否存在三个元素a,b,c,使得a + b + c = 0?找出所有满足条件且不重复的三元组。

注意:答案中不可以包含重复的三元组。

示例:

​
给定数组 nums = [-1, 0, 1, 2, -1, -4],

满足要求的三元组集合为:
[
  [-1, 0, 1],
  [-1, -1, 2]
]

给定代码快如下:


%还有待改进~~

function result=task01sum(M)
M=sort(M);
result=[];
result1=[];
[~,b]=size(M);
for i=1:b
    if M(1,i)>0
        result=[];
    end
    if i>1&& M(1,i)== M(1,i-1)
        continue
    end
    L=i+1;
    R=b-1;
    while (L<R)
         if(M(1,i)+M(1,L)+M(1,R)==0)
         result1=[ M(1,i),M(1,L),M(1,R)];
            while(L<R && M(1,L)==M(1,L+1))
                L=L+1;
            end
            while(L<R && M(1,R)==M(1,R-1))
                R=R-1;
            end
          L=L+1;
          R=R-1;    
         elseif (M(1,i)+M(1,L)+M(1,R)>0)
              R=R-1;
          else
              L=L+1;
         end
    end
    result=[result;result1];
end

结果如下图所示:
在这里插入图片描述

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!