zoukankan      html  css  js  c++  java
  • Equal Sides Of An Array

    You are going to be given an array of integers. Your job is to take that array and find an index N where the sum of the integers to the left of N is equal to the sum of the integers to the right of N. If there is no index that would make this happen, return -1.
    题目意思是在给定数组中找出一个位置,该位置左边部分整数的和和右边部分整数的和相等。如果该位置不存在,返回-1

    思路就是遍历整个数组,每次求左右部分的和,比较是否相等,如果相等,就返回该位置。show code:

    function findEvenIndex(arr)
    {
      var arr1,arr2,font,end;
       for(var i=0;i<arr.length;i++){
          font=0;
          end=0;
          arr1=arr.slice(0,i);
          arr2=arr.slice(i+1);
          for(var j=0;j<arr1.length;j++){  
               font+=arr1[j];  
          }  //左边和
          for(var k=0;k<arr2.length;k++){
               end+=arr2[k];     
          }  //右边和
          if(font==end){
             return i;
             break;  //找到后跳出循环
          }
       }
       return -1;
    }

    做完后想想如果存在多个这样的位置呢,可以把符合条件的所有位置找出来。代码稍微改变下就ok了

    function findEvenIndex(arr)
    {
      var flag=[];
      var arr1,arr2,font,end;
       for(var i=0;i<arr.length;i++){
          font=0;
          end=0;
          arr1=arr.slice(0,i);
          arr2=arr.slice(i+1);
          for(var j=0;j<arr1.length;j++){  
               font+=arr1[j];  
          }
          for(var k=0;k<arr2.length;k++){
               end+=arr2[k];     
          }
          if(font==end){
             flag.push(i);
          }
       }
       if(flag.length==0){
             return -1;
       }
       else{
          return flag;
       }
    }

    就是把所有符合条件的位置存在数组中最后返回。

    最后推荐一个时间复杂度为O(n)的算法:

    function findEvenIndex(arr)
    {
      var sum = arr.reduce((a,b) => a+b);
      var l=0;
      for(var i=0;i<arr.length;i++){
         sum-=arr[i];
         if(l==sum){
            return i;
         }
         l+=arr[i];
      }
      return -1;
    }
  • 相关阅读:
    flask-login
    python3安装scrapy框架
    Redis--对象共享(整数型字符串)
    Redis--对象(type、encoding、ptr、lru、refcount)
    Redis--内存回收(引用计数法)
    Redis--跳跃表
    Redis--压缩列表(节约内存,连锁更新)
    Redis--整数集合(升降级)
    Redis--Rehash(h[0],h[1],rehashIdx, 渐进式)
    Redis--解决Hash表键冲突(单向链表next指针,表头)
  • 原文地址:https://www.cnblogs.com/renbo/p/8007298.html
Copyright © 2011-2022 走看看