数组平衡点算法研究


        前些天笔者的一位朋友参加面试,参加笔试的时候碰到了一道求二维数组平衡线的算法题,题目是要这样子:

        给你一个二维数组,要求打印出所有平衡线的index序号,平衡线的意思是:这个线上面的所有数和下面的所有数之和相等,如:

        二维数组:int[][] a = new int[][]{{1,1},{1,2},{1,1},{3,2}};

        1 1

        1 2

        1 1  -------> 平衡线

        3 2


        怎么解决这个问题呢,那我们先换个思路,先来找找一维数组的平衡点,平衡点就是指这个点之前的所有数之和等于这个点之后的所有数之和。

        思路是这样子的:先算出一维数组每个index之前各个数之和(包括index) 去覆盖掉这个一维数组, 然后遍历这个数组,如果某个index前面的那个index值等于数组之和减去

        这个index的值,那这个index就是一个平衡点。算法代码如下:


        


            算法的时间复杂度为O(n)


            现在我们继续回到二维数组的平衡线问题上面,解决了一维数组的平衡点问题,那解决二维数组的平衡线问题就很简单了,把二维数组转化为一维数组不就解决了这个              问题,算法代码如下:

           


              算法时间复杂度为O(n^2),

              欢迎大家提出更好的算法实现




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值