数组
二维数组,在数据处理的时候用的比较多,例如ADC采集数据,求平均值等。学了用处大。 二维数组的定义如下所示: 技巧:把二维数组看成是一个表格,第一个下标表示表格有多少行,第二个下标表示表格有多少列
某石油勘探公司正在按计划勘探地下油田资源。他们工作在一片长方形的地域中,首先将该地域划分为许多小正方形区域,然后使用探测设备分别探测每一块小正方形区域是否有油。若在一块小正方形区域中探测到有油,则标记为’@’,否则标记为’*’
给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。 请尝试使用原地算法完成
找出 nums 中连续、非空且其中最大元素在范围 内的子数组,并返回满足条件的子数组的个数。 生成的测试用例保证结果符合 32-bit 整数范围。 输出:3 一个容易想到的思路是使用“单调栈”
Base64编码的思想是是采用64个基本的ASCII码字符对数据进行重新编码。它将需要编码的数据拆分成字节数组。以3个字节为一组
一般初学者学习一门语言,一般都有那么经典的几个题,比如判断水仙花,进制转换,计算1加到100的和,输出多少以内的素数或是判断一个数是否是素数等等。我学C语言老师也不厌其烦地布置这类题目,因为我之前有过基础,所以思考题目时总会有些拓展,比如十进制转换成二进制这道题。 通过不断的对2取余得到的余数保存在数组a[]里,最后数组里就是得到的二进制数(但是是反的,输出的时候需要从a[n]->a[0]输出)
你是否知道JavaScript其实也是一个函数式编程语言呢?本指南将教你如何利用JavaScript的函数式特性。 要求:你应当已经对JavaScript和DOM有了一个基本的了解。 写这篇指南的目的是因为关于JavaScript编程的资料太多了但是极少的资料提到了JavaScript的函数式特性
我们主要进行关心的就是双重for循环以及其中的交换操作,首先外层循环表示要进行比较的趟数,每一趟都会产生一个最大值或最小值,这也就是冒泡的由来,i的范围限定为i < arr.length - 1,为什么不是i < arr.length呢?由上图可知,当未排序的数组中只有一个元素时,不需要再进行比较了,这时整个数组已经是有序状态了。那么内层循环中,为什么 j 的限制条件 为j < arr.length - 1 - i呢?这个也比较好理解,首先第一次的时候,要把 j 的范围限制在j < arr.length - 1 -0,这样arr[j] > arr[j+1]这样的操作才不会出现数组越界,进行第二趟比较的时候,arr[length -1]位置的元素已经是最大的,不需要再进行比较,这时候就要写成j < arr.length - 1 - 1,总结起来就是j < arr.length - 1 - i 但是我们进一步探究,上面的代码是存在这样的弊端的:加入第二趟排序之后,数组就已经是有序状态了,那么后面的几趟比较是不是非常多余呢?下面介绍冒泡排序的改进 代码都是自己在IDE中实现的,直接全部贴过来了,虽然看起来很冗长,其实关键的核心代码就那么几行,我们来看具体的改进方法,采用的方法就是设置一个flag变量,在当前这一趟比较中,如果发生了元素的交换,那么将flag设置为true,如果这趟比较从头到尾都没有进行过交换,那么最终的flag值为false,直接break退出循环。 用我自己的话理解呢,这个改进就是在之前的单向寻找最大值的基础上,增加了反向寻找最小值,也就是双向冒泡,总体上来讲,鸡尾酒排序要比普通冒泡排序的交换次数要少,但是对于鸡尾酒排序,在算法的时间复杂度和空间复杂度上并没有改进,在完全逆序数组进行排序时,不管是普通的还是改进的,表现得都是非常差
关于两个字符串s1s2的差别,可以通过计算他们的最小编辑距离来决定。 设A、B为两个字符串,狭义的编辑距离定义为把A转换成B需要的最少删除(删除A中一个字符)、插入(在A中插入一个字符)和替换(把A中的某个字符替换成另一个字符)的次数,用ED(A,B)来表示。直观来说,两个串互相转换需要经过的步骤越多,差异越大
一个复合操作(版块)有一个或多个语句构成,他们由大括号和小括号({})包括起来,注意小括号后面不需要分号(;) 例如: break语句使程序跳出最近的一个,while,for,switch语句。如果在一个循环语句里面已经完成了需要的工作,则可以使用break语句跳出循环。例如: 这段代码的意思就是,遍历数组array,如果发现数组中的一个值为0的时候,则跳出这个循环






