2007年5月去一个中小型外企的上机题,笔试全是英文的。没戏了。
package myAction;
public class Balence {
/**
* 求数组index左边的和
* @param a
* @param index
* @return
*/
public static int left(int[] a, int index)
{
int left = 0;
if(index==0)
{
left = a[0];
return left;
}
for(int i=0;i<index;i++)
{
left = left + a[index-1-i];
}
return left;
}
/**
* 求数组右边的和
* @param a
* @param index
* @return
*/
public static int right(int[] a, int index)
{
int right = 0;
if(index==a.length-1)
{
right = a[a.length-1];
return right;
}
for(int i=index+1;i<a.length;i++)
{
right = right + a[i];
}
return right;
}
/**
* 遍历数组,如果左边等于右边,则打印平衡点index
* @param a
*/
public static void balences(int a[])
{
int b[];
int left = 0;
int right = 0;
int length = 0;
for(int i=0;i<a.length;i++)
{
left = left(a,i);
right = right(a,i);
if(left==right)
{
length++;
System.out.println("平衡点" + length + ":" + i);
}
}
System.out.println("平衡点共计" + length + "个");
}
//方法二
//1. 先求總數.
//X =A1+A2+A3+A4+..... +An
//2. 從A1開始累加,設為N , 和等於(X-N)/2 為平衡點.
//3. 一直找到數組最後
//4.除于2后好像结果有点问题??
public static void balence2(int[] a)
{
int sum = 0;
int temp = 0;
int length = 0;
//求数组的总和
for(int i=0;i<a.length;i++)
{
sum = sum + a[i];
}
for(int i=0;i<a.length;i++)
{
temp = temp + a[i];
if(temp==((sum-temp)/2))
{
length++;
System.out.println("平衡点" + length + ":" + i);
}
}
System.out.println("平衡点共计" + length + "个");
}
//测试类
public static void main(String[] args)
{
int[] a = {1,2,5,6,2,4,2,8};
int left = left(a,3);
int right = right(a,3);
// System.out.println("left=" + left);
// System.out.println("right=" + right);
balences(a);
// balence2(a);
}
}
分享到:
相关推荐
查找数组的平衡点。 平衡点是索引的左侧等于索引的右侧的位置。 此函数返回平衡点索引数组。 安装 npm install balance-points bower install balance-points 用法 const balancepoints = require ( 'balance-...
因此,在选择使用`grep()`或`splice()`时,需要根据实际情况考虑性能与需求的平衡。 最后,为了更深入理解如何使用`grep()`方法,我们也可以参考权威的开发文档,例如W3Schools中的`grep()`函数的描述和示例。这类...
本知识点主要探讨如何将一个升序数组转化为一棵平衡二叉搜索树。 #### 平衡二叉搜索树定义 平衡二叉搜索树是一种特殊的二叉搜索树,其中对于任何节点而言,其左子树和右子树的高度差不会超过1。这种结构确保了树的...
线性表的动态扩充实现主要涉及到以下几个关键点: 1. **初始化**:线性表的初始化通常设定一个初始容量,比如10。这样可以避免一开始就分配大量内存,同时也能快速响应初始的插入操作。 2. **扩容机制**:当线性表...
考虑到我们的目标是让两个数组的总和之差尽可能小,最直观的想法就是尝试平衡两个数组的元素分布。如果 `sum(a) > sum(b)`,那么应该选择较大的 `a[i]` 与较小的 `b[j]` 进行交换,反之亦然。 #### 2. 算法步骤 - *...
- **单点更新**:更新数组A[i],通过一次O(logn)的迭代,更新C[i]及其所有祖先节点。 - **区间查询**:询问区间[A, B]的聚合信息,同样通过O(logn)的迭代,从C[B]递减地减去C[A-1],得到区间[A, B]的信息。 5. **...
- **动态数据集**:当数组是动态变化的,可以考虑使用数据结构如堆、平衡树等来维护最大值和次最大值。 - **大规模数据**:处理大数据集时,可以采用分治策略或者流式处理方法。 通过以上分析,我们不仅理解了如何...
在IT行业中,平衡点问题是一个常见的数据结构与算法问题,主要涉及到数组或链表的处理。平衡点可以理解为一个位置,使得该位置左侧的所有元素之和等于右侧所有元素之和。这个问题在很多实际场景中都有应用,比如游戏...
树状数组的优点在于其空间效率高,只需要和原始数组同样大小的空间,且操作速度快,对于动态维护区间信息的问题,它的性能通常优于传统的数组遍历或平衡二叉搜索树等方法。 在实际编程中,理解树状数组的工作原理并...
接下来,我们将详细探讨这些知识点。 1. **树(Tree)**: 树是一种非线性的数据结构,它由若干个节点组成,每个节点包含一个值,并可能链接到零个或多个子节点。树的概念广泛应用于计算机科学中,如文件系统、...
2. **空间效率**:相比其他数据结构如平衡树,树状数组只需要O(N)的空间,更节省内存。 3. **简单易用**:相比于红黑树、AVL树等高级数据结构,树状数组的实现相对简单,容易理解和操作。 ### 五、树状数组的应用...
相较于其他数据结构如线段树、平衡树等,树状数组具有实现简单、效率高的特点,在处理动态数组问题时尤为适用。 #### 二、核心特性 1. **单点更新**:树状数组支持快速地增加或减少数组中特定位置的值。这使得树状...
下面将详细讨论其中涉及的主要知识点。 首先,我们来看"链表"部分。链表是一种线性数据结构,不同于数组,它不连续存储元素。链表由节点构成,每个节点包含数据和指向下一个节点的指针。这里可能包括单链表、双向...
1. **定义**:线段树是一种平衡二叉树,每个节点代表一个区间,叶子节点对应输入数组中的元素,非叶子节点的区间由其子节点的区间合并而成。 2. **操作**:线段树支持两种主要操作:区间查询和区间更新。区间查询...
2. **空间效率**:与平衡二分查找树等其他数据结构相比,树状数组的空间复杂度更低,只需要一个数组即可。 3. **易于实现**:相比于其他高级数据结构,树状数组的代码实现相对简单,易于理解和调试。 **五、树状...
在实际编程时,树状数组常常与其他数据结构如堆、平衡二叉搜索树等结合使用,以解决更复杂的查询和更新问题。例如,在求解动态区间最值问题时,可以结合最小堆来加速查询过程。因此,树状数组是信息学竞赛和算法设计...
2. 调整数据库的批量插入大小,找到性能与内存消耗的最佳平衡点。 3. 分析和调整SQL执行计划,确保使用了合适的索引和表分区策略。 4. 在必要时,使用Oracle的Bulk Bind功能,它可以一次性绑定多个值,进一步提高...
二维数组的初始化也是重要的知识点。你可以直接在声明时初始化,如`int array[3][4] = {{1,2,3,4}, {5,6,7,8}, {9,10,11,12}};`,这将创建一个3x4的矩阵,每个元素都有初始值。在“两地调度”问题中,这些数值可能...
例如,可以使用数组公式计算销售收入、边际贡献、边际贡献率等,并通过调整单元格的数据来观察它们如何影响盈亏平衡点。 总结起来,Excel在投资项目不确定性风险分析中起到关键作用,它提供了计算和模拟各种财务...
在这个优化版本中,我们遍历数组,计算每个位置作为分割点时两个子数组的长度差,并保存差值最小的情况。最后,根据最佳分割点返回两个子数组。 在`main.js`文件中,可能会包含这样的实现以及测试用例,确保函数在...