C#练习题答案: 找到主元【难度:2级】--景越C#经典编程题库,1000道C#基础练习题等你来挑战

找到主元【难度:2级】:

答案1:

namespace ArrayPivot {
  using NUnit.Framework;
  using System;

  [TestFixture]
  public class ArrayPivotTest
  {
    [TestCase(new int[]{1,2,4,6,2,2,2,1},ExpectedResult=3)]
    [TestCase(new int[]{4,2,4,6,2,2,10,8},ExpectedResult=5)]
    [TestCase(new int[]{1,2,4,6,2,2,2,1,9},ExpectedResult=-1)]
    public int FindPivotIndexReturnCorrectIndex(int[] array)
    {
        return array.FindPivotIndex();
    }
  }
}

答案2:

using System.Linq;
namespace ArrayPivot 
{
    public static class ArrayExtention
    {
        public static int FindPivotIndex(this int[] xs) => 
         xs.Select((x,i) => i > 0 &amp;&amp; i < xs.Length - 1 &amp;&amp; xs.Take(i).Sum() == xs.Skip(i+1).Sum() ? i : (int?)null).FirstOrDefault(i => i.HasValue) ?? -1;
          
    }

}

答案3:

using System;
using System.Linq;

namespace ArrayPivot 
{
    public static class ArrayExtention
    {
        public static int FindPivotIndex(this int[] xs)
        {
            int sl = 0, sr = xs.Sum();
            for (int i = 0; i < xs.Length; i++)
            {
                sr -= xs[i];
                if (sl == sr)
                    return i;
                sl += xs[i];
            }
            return -1;
        }
    }

}

答案4:

namespace ArrayPivot 
{
    using System;
    using System.Linq;    
    using System.Collections.Generic;
    public static class ArrayExtention
    {
        public static int FindPivotIndex(this int[] lst)
        {
            var index =  Enumerable.Range(1, lst.Length - 1)
                .FirstOrDefault(i => lst.Take(i).Sum(_ => _) == lst.FromLast(i + 1).Sum(_ => _));
            return index == 0 ? -1 : index;
        }

        private static int[] FromLast(this int[] lst, int n)
        {
            var l = new List<int>();
            for (var i = n; i < lst.Length; i++)
            {
                l.Add(lst[i]);
            }
            return l.ToArray();
        }
    }
}

答案5:

using System;
using System.Linq;
namespace ArrayPivot 
{
    public static class ArrayExtention
    {
        public static int FindPivotIndex(this int[] integerArray)
        {
          var head = 0;
          var headValue = integerArray[head];
          var tail = integerArray.Length - 1;
          var tailValue = integerArray[tail];
          var delta = 0;
          
          while(tail - head > 1)
          {
            delta += tailValue - headValue;
            if(delta == 0)
            {
              headValue = integerArray[++head];
              tailValue = integerArray[--tail];
            }
            else if(delta > 0)
            {
              headValue = integerArray[++head];
              tailValue = 0;
            }
            else
            {
              tailValue = integerArray[--tail];
              headValue = 0;
            }
          }
          return (delta == 0) ? head : -1;
        }
    }

}

答案6:

using System;
using System.Collections.Generic;
using System.Linq;
namespace ArrayPivot 
{
    public static class ArrayExtention
    {
        public static int FindPivotIndex(this int[] integerArray)
        {
            int pivotIndex = -1; 

            for (int i = 0; i < integerArray.Length; i++)
            {
                int currIndex = i;

                List<int> rightNumbens = new List<int>();

                for (int r = 0; r < i; r++)
                {
                    rightNumbens.Add(integerArray[r]);
                }

                List<int> leftNumbers = new List<int>();

                for (int l = i + 1; l < integerArray.Length; l++)
                {
                    leftNumbers.Add(integerArray[l]);
                }

                pivotIndex = rightNumbens.Sum() == leftNumbers.Sum() ? currIndex : pivotIndex;
            }

            return pivotIndex;
        }
    }

}

答案7:

using System;
using System.Linq;
namespace ArrayPivot 
{
    public static class ArrayExtention
    {
        public static int FindPivotIndex(this int[] integerArray)
        {
            for(var i = 0; i < integerArray.Length; i++){
               var left = integerArray.Take(i).Sum();
               var right = integerArray.Skip(i+1).Take(integerArray.Length - i).Sum();
               if (left == right)
                 return i;
            }
            return -1;
        }
    }

}

答案8:

using System;
using System.Linq;
namespace ArrayPivot 
{
    public static class ArrayExtention
    {
        public static int FindPivotIndex(this int[] integerArray)
        {
           int[] l = integerArray;
            int[] r = integerArray.Reverse().ToArray();


            for (int i = 1; i < integerArray.Length - 1; i++)
            {
                if (sum(l, i) == sum(r, integerArray.Length - 1 - i))
                {
                    return i;
                }

            }
            return -1;
        }

        private static int sum(int[] integerArray, int index)
        {
            int ret = 0;

            for (var i = 0; i < index; i++)
            {
                ret += integerArray[i];
            }

            return ret;
        }        
    }
}

答案9:

using System;
using System.Linq;
namespace ArrayPivot 
{
    public static class ArrayExtention
    {
        public static int FindPivotIndex(this int[] integerArray)
        {
            int pivotIndex = -1;
            for(int i = 1; i < integerArray.Length; i++)
            {
                int sumLeft = 0, sumRight = 0;
                
                for(int j = 0; j < i; j++)
                {
                    sumLeft += integerArray[j]; 
                }
                
                for(int k = i+1; k < integerArray.Length; k++)
                {
                    sumRight += integerArray[k]; 
                }
                
                if(sumLeft == sumRight)
                {
                    pivotIndex = i;
                    break;
                }
                continue;
            }
            return pivotIndex;
        }
    }

}

答案10:

using System;
using System.Linq;
namespace ArrayPivot 
{
    public static class ArrayExtention
    {
        public static int FindPivotIndex(this int[] integerArray)
        {
            for (int i = 0; i < integerArray.Length - 3; i++)
            {
                int a = integerArray.Take(i + 1).Sum();
                if (a == integerArray.Sum() - a - integerArray[i+1]) return i + 1;
            }
            return -1;
        }
    }
}

答案11:

using System;
using System.Linq;

namespace ArrayPivot 
{
    public static class ArrayExtention
    {
        public static int FindPivotIndex(this int[] a)
        {
            if (a.Length < 3)
            {
                return -1;
            }
            for (int i = 1; i < a.Length - 1; i++)
            {
                int sumLeft = 0;
                int sumRight = 0;
                for (int j = 0; j < i; j++)
                {
                    sumLeft += a[j];
                }
                for (int j = i + 1; j < a.Length; j++)
                {
                    sumRight += a[j];
                }
                if (sumLeft == sumRight)
                {
                    return i;
                }
            }
            return -1;
        }
    }
}



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值