数组平衡点问题

题目:

找数组平衡点问题:

给定一个整数数组P,A[0..N - 1] ,平衡点定义为整数P,  满足

A[0] + A[1] +...+A[P - 1] = A[P + 1] + A[P + 2] + ... + A[N - 1]

注意不包含P元素。

输出任何一个平衡点,如果没有,则输出-1。

如果P == 0 等号左边是0,P == N - 1等号右边是0.

N是10^7的范围,每个数组元素是-2147483648..2147483647

要求复杂度: 时间复杂度O(N),空间复杂度O(1)

解答:这个题目比较容易。其实就是记录下全部数组元素的和sum(用long long),然后试图枚举P, 顺便记录  left = A[0] +...+A[P - 1]

判断left == sum - left - A[P]即可。

[cpp] view
plain
copy

  1. // you can also use includes, for example:  
  2. // #include <algorithm>  
  3. int solution(const vector<int> &A) {  
  4.     // write your code here...  
  5.     int n = A.size(),i;  
  6.     long long sum = 0, left = 0;  
  7.     for (i = 0; i < n; ++i) {  
  8.         sum += A[i];  
  9.     }  
  10.     for (i = 0; i < n; ++i) {  
  11.         if (left == sum - A[i] - left) {  
  12.             return i;  
  13.         }  
  14.         left += A[i];  
  15.     }  
  16.     return -1;  
  17. }  
时间: 2024-10-10 12:22:39

数组平衡点问题的相关文章

数组笔试题

1.写一个函数找出一个整数数组中第二大的数. // 时间复杂度O(n) const int MINNUMBER = -32767; int find_sec_max(int data[], int count) { int maxnumber = data[0]; int sec_max = MINNUMBER; for(int i = 1; i < count; i++) { if(data[i] > maxnumber) { sec_max = maxnumber; maxnumber =

python对数组进行反转的方法

  本文实例讲述了python对数组进行反转的方法.分享给大家供大家参考.具体实现方法如下: ? 1 2 3 arr = [1,2,3] arr.reverse() print(arr) 输出: [3,2,1] 希望本文所述对大家的Python程序设计有所帮助.

php对关联数组循环遍历的实现方法

 这篇文章主要介绍了php对关联数组循环遍历的实现方法,涉及php操作数组的技巧,具有一定参考借鉴价值,需要的朋友可以参考下     本文实例讲述了php对关联数组循环遍历的实现方法.分享给大家供大家参考.具体分析如下: php对于类似 ? 1 $age = array("zhangshan"=>14,"lisi"=>15,"sharejs"=>16); 这样的数组可以通过foreach的方法进行遍历,下面是详细的代码: ? 1

c-关于C字符串数组格式化输出的一些小问题

问题描述 关于C字符串数组格式化输出的一些小问题 尝试写了一个输入输出文件和小程序,因为出问题的就只有这两行代码,所以没有把其他代码贴上来 最初代码是这样的 head[][5] char head[][5] = { "id", "name", "age", "grade" }; fprintf ( input_file, "%st%st%st%sn", head[0], head[1], head[2],

java se-使用泛型打印输出任意类型的数组,为什么调用时有错误?

问题描述 使用泛型打印输出任意类型的数组,为什么调用时有错误? import java.util.Arrays; public class FanXing { public static void printMatrix(T[][] matrix){ for(int i=0;i<matrix.length;i++){ System.out.println(Arrays.toString(matrix[i])); } } public static void main(String[] args)

[数据结构] 数组与链表的优缺点和区别

概述 数组 是将元素在内存中连续存放,由于每个元素占用内存相同,可以通过下标迅速访问数组中任何元素.但是如果要在数组中增加一个元素,需要移动大量元素,在内存中空出一个元素的空间,然后将要增加的元素放在其中.同样的道理,如果想删除一个元素,同样需要移动大量元素去填掉被移动的元素.如果应用需要快速访问数据,很少插入和删除元素,就应该用数组. 链表 中的元素在内存中不是顺序存储的,而是通过存在元素中的指针联系到一起,每个结点包括两个部分:一个是存储 数据元素 的 数据域,另一个是存储下一个结点地址的

指向多维数组的指针变量

问题描述 指向多维数组的指针变量 #include int main() { int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; int *p; for(p=a[0];p<a[0]+12;p++) { if((p-a[0])%4==0) printf(" "); printf("%4d",*p); } } 把for(p=a[0];p<a[0]+12;p++)改成for(p=a[0];p<a+3;p++)为什么是正确的

指针-c语言中字符数组初始化问题

问题描述 c语言中字符数组初始化问题 字符数组初始化1: char str[]=""123"";//不报错2: char str[4]; str=""123"";//不能将const char[4] to char[4]字符指针初始化1: char *str=""123"";//不报错2: char *str; str=""123"";//不报错求

各位大神,传递图片问题,学长说是数组越界,不知道怎么解决

问题描述 各位大神,传递图片问题,学长说是数组越界,不知道怎么解决 图片传递代码图片接收代码 解决方案 不是内存溢出,而是有变量为null 解决方案二: 我觉得你的学长判断是错误的,因为错误消息已经写了:NullPointerException,这个异常消息的含义就是说有空对象调用了方法.所以不会是内存溢出(不完全排除,但可能性很小),而你所指出的那行代码上有一个空对象调用了方法. 我看过你的代码,你箭头所指向的代码一共有4个对象调用了方法,其中intent对象已经看到了你new的代码,所以它不