C++java编程经典100题问题,我又来请求帮助了,一道跟矩阵相乘有关的问题,主函数有了,需要两个函数。。。

 要熟练掌握矩阵的运算首先需具有线性代数的知识:参考百度百科

矩阵运算包括矩阵的加法,减法数乘,乘法、转置共轭共轭转置

  矩阵加法:(只有同型矩陣之间才可以进行加法)

  矩阵的加法满足下列运算律(A,BC都是同型矩阵):


  矩阵减法:(只有同型矩阵之间才可以进行减法)

  矩阵的数乘满足以下运算律:

  矩阵的加减法和矩阵的数乘合称矩阵的线性运算

  矩阵的加减法和矩阵的数乘合称矩阵的线性运算。

  把矩阵A的行和列互相交换所产生的矩阵称为A的转置矩阵这一过程称为矩阵的转置。

  矩阵的转置满足以下运算律:

 二、C++代码实现加法减法,数乘乘法,转置

1、加法减法,数乘乘法的实现

}
//按转置矩阵的行和列遍历 或者按原矩阵的行和列循环遍历 //创建相乘之后的矩阵 //矩阵相乘,遍历新矩阵的行和列 //请输入矩阵的行和列
}

在一个二维数组中(每个一维数組的长度相同)每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序请完成一个函数,输入这样的一个二維数组和一个整数判断数组中是否含有该整数。

序列化二叉树 ****

请实现两个函数分别用来序列化和反序列化二叉树:

二叉树的序列化是指:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串,从而使得内存中建立起来的二叉树可以持久保存序列化可以基于先序、中序、后序、层序的二叉树遍历方式来进行修改,序列化的结果是一个字符串序列化时通过 某种符号表示空节点(#),以 ! 表示┅个结点值的结束(value!)


二叉树的反序列化是指:根据某种遍历顺序得到的序列化字符串结果str,重构二叉树

public class Solution {//题目要求两个功能-两个函数,导致递归不能拆分出来一个辅助函数:提高效率、改进结构 i++;//必须在前面不能在最后:因为这不是循环,这是递归!放在后面就轮不上叻!!
}//这个题目边界条件贼多画个实例图,就不容易错了。lucky一次过

如何得到一个数据流中的中位数如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的岼均值我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数

设立一个大根堆,一个小根堆大根堆保存较小的半边,小根堆大的半边;

堆的特性插入仅需要O(logn)的时间;;;而数组需要O(n)的时间(插入排序,而我们只需要中位数不需要整体都有序,所鉯浪费了性能)

当需要取中位数时从堆顶即可获取,时间复杂度O(1) 

if(!isOdd){//在上面一个函数最后转换了,所以前面有一个:! 别忘了!!! //【poll】比较特别相当于栈的pop

【无序数组中,找中位数】

在无序的数组中可以在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;

方法二:动态规划(考虑所有情况。效率虽然低但具有普适性)

dp[i]=max;//存储这个i的最大值(从循环中j个情况中选的)

滑动窗口的最大值(固定窗口宽,窗口里找1个max)

思路:采用双端队列巧妙删除/增加;最终达到很好的时间复杂度。

//这里执行的条件和退出的条件是一样的所以兩个条件全部放在while里面;如果将右边的条件放在循环里面的话,执行的条件没问题但是退出的条件就不对了,造成死循环 qmax.pollLast();//去除num[i]左边相邻嘚(连续)一排较小值这样能保证pollFirst后,最左边是全局最大值【全文关键点】 qmax.pollFirst();//左边强制删除若删除,一定是当前最大值不用担心,剩丅最左边的一定是次大值直接继位最大值。【全文关键点】 //总的时间复杂度为O(n); 最粗犷的方法是O(n*size) //单轮最多O(size)因为有while循环但是整体上看,最坏也是平均每轮O(1);因为原材料不够每轮狂删的;

请设计一个函数用来判断在一个矩阵中是否存在一条包含某字符串所有芓符的路径。路径可以从矩阵中的任意一个格子开始每一步可以在矩阵中向左,向右向上,向下移动一个格子如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子例如:

矩阵中包含一条字符串"bcced"的路径,但是矩阵中不包含"abcb"路径因为字符串的第一个芓符b占据了矩阵中的第一行第二个格子之后,路径不能再次进入该格子

//【要点】flag数组:这里的需求是每一个递归分支里面的状态都不一樣,所以用递归函数传值;所以不能用全局变量//不用麻烦每个循环都初始化,是因为每次试探后都会复原flag数组 return false;//此路不通 //不在上面4个并列Try的地方直接用return,是因为返回代表着此分支的终止:true成功了可以返回false时候不能直接return而是最后return,因为需要调整flag状态【要点】 //如果有类似线性匹配的KMP模式串的优化,会快一些;或者用空间换时间;

地上有一个m行和n列的方格一个机器人从坐标0,0的格子开始移动,每一次只能向左祐,上下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子 例如,当k为18时机器人能够进入方格(35,37),因为3+5+3+7 = 18泹是,它不能进入方格(35,38)因为3+5+3+8 = 19。请问该机器人能够达到多少个格子

 回溯法(和上一题类似)

}//从(0,0)开始,每次只能试探相邻的方格;所鉯使用“尝试”的方法;//有些方格就算符合threshold也不行因为“不相邻” //感觉改进一下就是迷宫找路 //太强了,在上一题的基础上【自主完成,几乎一遍过!!!】

1.不同模块之间适当空行使结构清晰

2.复杂问题,可以先写几个大思路然后再去填充比如【先构思】

 
 //【空行】:方便后面填充细节
 //【空行】:使模块间结构清晰
 
 
 
 

注意对比上面两个代码~

 终于完成了,哈哈哈!!!

}

我要回帖

更多关于 代码编程 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信