这是我去腾讯面试实习生时被问到的一道题:如何把一个数组中模3等于0的数放在数组的前面,其余的放在后面。
算法是一开始就想到了,但是细节没有想好,所以当时写的时候程序的结构比较混乱,没有写出应有的水平。现在来对该题进行了实现,算法的思路还是很清晰的,代码如下:
/**
* 数组模3特性
* @author xiaomi
* 2012.4.26
*/
public class Modulo3 {
public static void main(String[] args) {
int[] a = {1,3,5,7,6,9,10};
mod3(a);
for(int i = 0 ;i< a.length;i++){
System.out.print(a[i]+" ");
}
}
public static void mod3(int[] a){
int begin,end;
begin = 0;
end = a.length-1;
while(begin < end){
while(begin < end && a[begin]%3 == 0){
begin++;
}
while(begin < end && a[end]%3 != 0){
end--;
}
if(begin < end){//小优化,考虑到最后begin>=end时就不交换了
int temp = a[begin];
a[begin] = a[end];
a[end] = temp;
}
}
}
}
分享到:
相关推荐
标签中的“动态数组”和“模版”进一步强调了这个类的关键特性。动态数组确保了内存管理的灵活性,而模版则提供了泛型编程的能力,使该类可以应用于任何满足基本操作的数据类型。 在压缩包文件“CArray动态数组”中...
树状数组的核心在于利用二进制表示中的低位1的特性来建立数组间的联系,从而达到快速计算区间和的目的。 **2.2 数据结构** 假设有一个长度为n的一维数组A[1...n],我们可以通过构建一个辅助数组C[1...n]来存储每个...
3. **类的成员**:我们的动态数组类需要包含以下几个关键成员: - `size`:表示当前数组的元素个数。 - `capacity`:表示数组能容纳的最大元素个数。 - `data`:一个指针,指向动态分配的内存空间,存储数组元素...
在编程领域,数组是基础数据结构之一,而ArrayList...在VS2008中,我们可以通过自定义模板类并利用友元函数的重载特性,来实现更高效、更灵活的数组操作。同时,理解这些概念有助于我们在实际开发中做出更适合的选择。
现在静态数组的最大维数做到了3,动态数组的维数不限//你需要多高维数的?维数越高越 慢, :) 由于时间不多,精力和水平有限,其中的缺点和错误欢迎指正,也十分欢迎哪位能帮我进一 步提高访问速度. 谢谢! ...
这种连续存储特性使得数组元素的访问非常快速,因为计算机可以直接计算出特定元素的内存位置。 #### 六、一维数组的教学方法与策略 在教授一维数组时,可以采用以下教学方法和策略: 1. **案例教学法**:通过具体...
在TI DSP平台上对复数数组进行模运算并找到最大值及其位置是一项常见的处理任务,尤其在信号处理和数字滤波等应用中。TI DSP(Digital Signal Processor)是一种专门设计用于执行数字信号处理算法的微处理器,它具有...
在LabVIEW编程环境中,数组、簇和波形是三种重要的数据类型,它们分别有不同的特性和用途。 数组是LabVIEW中最基本的数据结构之一,它是由相同类型元素组成的集合。数组可以是一维或多维,最大的维度数量可达231-1...
3. **多维数组实例化**: ```cpp typedef ADT[10]> M1; ADT[20]> m2; ``` 上述代码定义了一个10×20的二维整数数组。 4. **更复杂的多维数组实例化**: ```cpp typedef ADT[10]> M1; typedef ADT[20]> M2; ...
XSL,全称为eXtensible ...总结来说,虽然XSL本身并不直接支持数组,但我们可以通过一系列技巧和XSLT的特性来模拟数组操作。通过理解这些概念和技巧,我们可以更高效地处理XML数据,实现复杂的数据转换和操作。
3. **自定义动态数组:** 为了克服上述两种方法的局限性,可以考虑自己实现一个动态数组类。这样的类可以提供更灵活的内存管理和更好的性能优化选项。下面我们将详细介绍如何通过函数模板、动态数组类和数组类模板...
该案例展示了如何利用 C++ 的模板特性来创建一个通用的数组类 `MyArray`,它能够处理任意类型的数据。案例代码通过一系列构造函数、成员方法以及操作符重载来实现数组的基本功能,如动态内存分配、深拷贝、尾插、尾...
矩阵由于其二维特性,适合进行线性代数运算,如求逆、转置、行列式计算、特征值和特征向量的求解以及矩阵乘法等。这些运算在数学和工程领域中有着广泛的应用。相比之下,数组则支持更多元化的操作,例如索引、切片、...
数组的内存特性使得它们在处理大量有序数据时非常高效,因为可以通过索引快速访问元素。然而,由于数组长度不可变,如果需要增加或减少元素,就不得不创建新的数组并复制旧数组的内容,这在处理大数据时可能会成为...
8. **异步编程(Asynchronous Programming)**:利用VB.NET的异步等待(`Async`/`Await`)特性,避免在并发操作中使用锁,提高程序的可读性和性能。 测试多线程程序的正确性是一个挑战,因为它涉及到复杂的线程调度...
泛型是Delphi(以及许多其他面向对象语言)中的一种特性,它允许开发者创建可重复使用的代码模板,这些模板可以在不同的数据类型上工作。在泛型类或函数中,我们使用类型参数来定义通用行为,而具体的数据类型则在...
例如,一个3x1x4的数组,如果第一维度只有一个元素,使用`squeeze()`函数可以将其降维为3x4的二维数组。 2. **reshape()**:改变数组的形状,但不改变其元素数量。你可以将一个三维数组重塑为一维向量或二维矩阵,...
在MATLAB中,数组操作是其核心特性之一,特别是矩阵的平方运算,是许多科学计算中的常见操作。MATLAB的设计理念就是以矩阵为基础,因此它提供了高效且直观的方式来执行矩阵运算,包括数组平方。 1. **MATLAB基础**...
总的来说,使用数组表示循环链表来解决约瑟夫环问题是一种巧妙的方法,它结合了数组的高效访问和链表的循环特性,为编程挑战提供了一个有趣的解决方案。通过理解这个算法,不仅可以提升编程技巧,还能深入理解数据...