`
YuHuang.Neil
  • 浏览: 180737 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

给定一个整数数组,检测是否存在一个和为零的子数组

阅读更多
问题:给定一个整数数组,写一个算法实现判断是否存在一个和为零的子数组。

答:算法思路:计算数组的前缀和,然后将前缀和进行排序,如果存在连续两个元素相同的情况即存在一个和为零的子数组,否则不存在。

算法的代码实现:


//
//  main.cpp
//  MyProjectForCPP
//
//  Created by labuser on 11/2/11.
//  Copyright 2011 __MyCompanyName__. All rights reserved.
//

#include <iostream>
#include <math.h>

#define     YES     1
#define     NO      0

using namespace std;


void sort(int x[],int n);

int zero_sum(int x[],int n){
    int i;
    
    for(i=1;i<n;i++){
        x[i]+=x[i-1];
    }
    
    sort(x,n);
    
    for(i=1;i<n && x[i]!=x[i-1];i++);
    
    return (i==n) ? NO : YES;
}

void sort(int x[],int n){
    int i,j;
    int temp;
    
    for(i=0;i<n;i++){
        for(j=i+1;j<n;j++){
            if(x[i]>x[j]){
                temp = x[i];
                x[i]=x[j];
                x[j]=temp;
            }
        }
    }
}

int main (int argc, const char * argv[])
{
    int x[] = {4,-1,2,1,-2,-1,5};
    int n = sizeof(x)/sizeof(int);
    int i;
    
    printf("\nZero Sum Sunarray Check Program");
    printf("\n===============================");
    printf("\n\nGiven Array : ");
    
    for(i=0;i<n;i++)
        printf("%4d",x[i]);
    
    if (zero_sum(x, n)==YES) {
        printf("\n\nYES, there is some range summing up to 0");
    }else{
        printf("\n\nNO! no such subarray found!");
    }
    
    printf("\n\n");
    
    return 0;
}





运行结果:
GNU gdb 6.3.50-20050815 (Apple version gdb-1705) (Fri Jul  1 10:44:54 UTC 2011)
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "x86_64-apple-darwin".tty /dev/ttys002
[Switching to process 17846 thread 0x0]

Zero Sum Sunarray Check Program
===============================

Given Array :    4  -1   2   1  -2  -1   5

YES, there is some range summing up to 0

Program ended with exit code: 0

分享到:
评论
1 楼 liuxbgiant 2013-08-28  
上面代码有些问题,可以与QQ:447369396交流……

相关推荐

    1.给出一个整数数组,求其中任意两个元素之差的最大值。

    给定一个整数数组,其中元素的取值范围为0到10000,求其中出现次数最多的数。

    leetcode第321题-FindJob:算法、面经、NLP

    给定一个整数数组nums和一个目标值target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。 示例: 给定 ...

    c程序设计习题参考(谭浩强三版)习题参考解答

    10.3输入10个整数,将其中最小的数与第一个数对换,把最大的一个数与最后一个对换。写3个函数:(1)输入10个数;(2)进行处理;(3)输出10个数。 74 10.4有n个整数,使其前面各数顺序向后移m个位置,最后m个数...

    leetcode答案-Two-Sum:leetcode两数之和代码

    题目描述:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。 示例...

    判断链表是否为回文链表leetcode-CTCI:CTCI

    给定一个整数数组,查找该数组是否包含任何重复项 Excel 工作表列号 给定 Excel 工作表中显示的列标题,返回其对应的列号 多数元素数组中的多数元素 LinkedList 反向部分代码/LinkedList.java 最低公共祖先 ...

    java小例子涵盖了基本的编程概念和常见的问题解决方法

    9. 冒泡排序:对给定的整数数组进行冒泡排序,并打印排序后的结果。 10. 计算圆的面积:根据给定的半径计算圆的面积,并打印结果。 这些例子涵盖了一些常见的编程任务和算法,适合用作学习和练习Java编程语言的入门...

    java联系题

    2. 设计一个Java程序,设有一个给定的int类型数组并有一批数据,现让你用二种以上的方法对其进行升或降序排列。 3. 写一个简单程序,判断输入的一串字符串是否为身份证号码,注意身份证判别的几个条件。 4. 设计一个...

    最大公共字符串leetcode-python-gibberish:技术面试数据结构与算法练习题

    如何找到总和等于给定数字的整数数组中的所有对? 如何从数组中删除重复元素 如何在数组中找到前两个最大数字? 在数组中查找重复项。 Input: [2,3,3,4,5,2] Output: 3 Explanation: Because the second index of 3 ...

    计算机二级公共基础知识

    元素ai的存储地址为:ADR(ai)=ADR(a1)+(i-1)k,ADR(a1)为第一个元素的地址,k代表每个元素占的字节数。 (3)顺序表的运算有查找、插入、删除3种。 1.3 栈 1. 栈的基本概念 栈(stack)是一种特殊的线性表,是限定只...

    leetcode有效期-Leetcode-Javascript-Solutions:我对LeetCode问题的回答

    给定一个整数数组,返回两个数字的索引,使它们相加为特定目标。 您可以假设每个输入都只有一个解决方案,并且您不能两次使用相同的元素。 7 反转整数 给定一个 32 位有符号整数,反转整数的数字。 8 字符串到整数 ...

    java-servlet-api.doc

    然而,一个映射可能是由一个URL和许多Servlet实例组成,例如:一个分布式的Servlet引擎可能运行在不止一个的服务器中,这样的话,每一个服务器中都可能有一个Servlet实例,以平衡进程的载入。作为一个Servlet的...

    C 程序指导书及实践指导

    (1) 编写一个函数prime(n),返回给定整数n是否为素数。 (2) 编写一个主函数,输入一个整数,调用(1)中的函数,判断此整数是否为素数,并输出结果。 (3) 对于属于多函数程序,可以采用每个函数分别进行编辑、编译的...

    javascript-practice:文章“10 个 Javascript 数组练习”的存储库

    任务清单fill - 编写一个方法,用给定的值创建一个新数组。 reverse - 编写一个恢复输入数组的方法。 紧凑- 编写一个方法,从所有不必要的元素中清除数组,例如 false、未定义、空字符串、零、null。 fromPairs - ...

    lrucacheleetcode-Leetcode-Questions:面试编码问题

    查找排序数组中元素的第一个和最后一个位置 数字范围的按位与 LRU缓存 数数说 第一个缺失阳性 截留雨水 跳跃游戏 旋转图像 Pow(x, n) 最长公共子序列 第一个唯一编号 合并间隔 独特的路径 加一 二叉树最大路径和 ...

    RFID数据流近似去重

    也就是说,TBF用整数数组而不是一个bit数组。 TBF如图三所示。它使用k个相互独立的哈希函数(h1,h2,…..hk),如BF一样映射到(0,….,m-1).TBF第i个单元的值用M[i]表示。为了存储RFID数据x,找到h1(x.TagID),⋯,...

    lrucacheleetcode-Problem-solving-101:我创建了这个repo来跟踪我的问题解决进度

    整数数组中查找重复项。 设置矩阵零 帕斯卡三角 下一个排列 数组的反转(使用归并排序) 股票买卖 旋转矩阵 在二维矩阵中搜索 Pow(X,n) 多数元素(&gt;N/2 次) 多数元素(&gt;N/3 次) 网格唯一路径 反向对 (Leetcode) ...

    字符串整数的余数leetcode-google-interview-questions:谷歌面试问题

    字符串可能的余数数组问题 在所有对中找到不同的位总和。 技巧:对于每一位扫描数组中的所有元素。 O(n.64) 求和等于 k ​​的连续子数组的总数。 技巧:如果整数是非负的,则开窗解决方案。...给定一个整数数组,

    java 平时实验 乘法表 回文 闰年判断 字符统计

    这是JAVA实验的部分题目的代码。 编程打印数字1-9的乘法表,注意输出格式。 编写一个字符界面的Application程序,接受用户输入的10个整数,比较并输出其中的...采用递归方法编程,检查一个任意给定的字符串是否是回文。

    Excel公式与函数大辞典.宋翔(带书签高清文字版).pdf

    2.6.7 BASE——将一个数转换为给定基数的文本格式 115 2.6.8 DECIMAL——将给定基数的文本转换为十进制数 116 第3章 日期和时间函数 117 3.1 了解Excel日期系统 118 3.1.1 Excel提供的两种日期系统 118 3.1.2 ...

    初级java笔试题-leetcodeDSAjava:力码练习!

    给定一个整数数组和一个整数 'target',返回一个由两个整数组成的整数数组,其总和等于 'target'。 第一次尝试:蛮力 我的直觉是遍历数组,查看两个整数的组合,并仅在尚未查看该组合的情况下检查总和是否等于“目标...

Global site tag (gtag.js) - Google Analytics