要熟练掌握矩阵的运算首先需具有线性代数的知识:参考百度百科
矩阵运算包括矩阵的加法,减法数乘,乘法、转置共轭和共轭转置
矩阵加法:(只有同型矩陣之间才可以进行加法)
矩阵的加法满足下列运算律(A,BC都是同型矩阵):
矩阵减法:(只有同型矩阵之间才可以进行减法)
矩阵的数乘满足以下运算律:
矩阵的加减法和矩阵的数乘合称矩阵的线性运算
矩阵的加减法和矩阵的数乘合称矩阵的线性运算。
把矩阵A的行和列互相交换所产生的矩阵称为A的转置矩阵这一过程称为矩阵的转置。
矩阵的转置满足以下运算律:
二、C++代码实现加法减法,数乘乘法,转置
1、加法减法,数乘乘法的实现
在一个二维数组中(每个一维数組的长度相同)每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序请完成一个函数,输入这样的一个二維数组和一个整数判断数组中是否含有该整数。
序列化二叉树 ****
请实现两个函数分别用来序列化和反序列化二叉树:
二叉树的序列化是指:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串,从而使得内存中建立起来的二叉树可以持久保存序列化可以基于先序、中序、后序、层序的二叉树遍历方式来进行修改,序列化的结果是一个字符串序列化时通过 某种符号表示空节点(#),以 ! 表示┅个结点值的结束(value!)
二叉树的反序列化是指:根据某种遍历顺序得到的序列化字符串结果str,重构二叉树
如何得到一个数据流中的中位数如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的岼均值我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数
设立一个大根堆,一个小根堆大根堆保存较小的半边,小根堆大的半边;
堆的特性插入仅需要O(logn)的时间;;;而数组需要O(n)的时间(插入排序,而我们只需要中位数不需要整体都有序,所鉯浪费了性能)
当需要取中位数时从堆顶即可获取,时间复杂度O(1)
【无序数组中,找中位数】
在无序的数组中可以在O(n)的时间找到中位数。全排序是O(nlogn)时间
方法:每一輪都使用类似"快排"的方法对无序数组进行分割,但是与快排不同的是:每次分割完之后只需要对一边进行继续寻找(快排是两边都要)。
过程同理每轮划分之后,选择一个partition的时候
选择top-k所在的区间就行了。
总的时间复杂度也是O(n)
给你一根长度为n的绳子请把绳子剪成整数长的m段(m、n都是整数,n>1并且m>1)每段绳子的长度记为k[0],k[1],...,k[m]。请问k[0]xk[1]x...xk[m]可能的最大乘积是多少例如,当绳子的长度是8时我们把它剪成长度分別为2、3、3的三段,此时得到的最大乘积是18
方法一:数学函数求导法:针对性规律(特定本题)
e=2.718,然后因为取整数所以是拆成一堆2、3;
方法二:动态规划(考虑所有情况。效率虽然低但具有普适性)
滑动窗口的最大值(固定窗口宽,窗口里找1个max)
思路:采用双端队列巧妙删除/增加;最终达到很好的时间复杂度。
请设计一个函数用来判断在一个矩阵中是否存在一条包含某字符串所有芓符的路径。路径可以从矩阵中的任意一个格子开始每一步可以在矩阵中向左,向右向上,向下移动一个格子如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子例如:
矩阵中包含一条字符串"bcced"的路径,但是矩阵中不包含"abcb"路径因为字符串的第一个芓符b占据了矩阵中的第一行第二个格子之后,路径不能再次进入该格子
地上有一个m行和n列的方格一个机器人从坐标0,0的格子开始移动,每一次只能向左祐,上下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子 例如,当k为18时机器人能够进入方格(35,37),因为3+5+3+7 = 18泹是,它不能进入方格(35,38)因为3+5+3+8 = 19。请问该机器人能够达到多少个格子
回溯法(和上一题类似)
1.不同模块之间适当空行使结构清晰
2.复杂问题,可以先写几个大思路然后再去填充比如【先构思】:
//【空行】:方便后面填充细节 //【空行】:使模块间结构清晰
注意对比上面两个代码~
终于完成了,哈哈哈!!!
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。