为了账号安全,请及时绑定邮箱和手机立即绑定

将数组拆分为两个相等的子数组,其中选择了索引

将数组拆分为两个相等的子数组,其中选择了索引

慕姐4208626 2023-04-13 15:30:35
我需要返回元素的索引,其中左侧元素的总和等于右侧元素的总和。例如,对于数组 [-3, 8, 3, 1, 1, 3],返回值是索引 2,因为前 3 ([-3, 8]) 左边元素的总和与其右侧元素的总和 ([1, 1, 3])。因此,我首先执行线性搜索功能来查找预期的索引,然后我尝试将数组左右拆分为所选索引,但没有成功我没有成功让它工作//linear-search portion,x is the index selected to be split pointpublic static int findindex(int arr[], int x) {//if array is null  if (arr == null) {        return -1;    }//find array lengthint len = arr.length;int i = 0;//traverse the arraywhile (i < len) {//if the i-th element is is x then return the index    if (arr[i] == x) {        return i;    } else {        i = i + 1;    }}//splint array portion,returns index if not possibleint leftsum = 0;//treverse array elementsfor (int i = 0; i < x; i++) {//adds current elements to left    leftsum += arr[i];//find sum of remader the array elements to rightsum    int rightsum = 0;    for (int j = i + 1; j < x; J++)        rightsum += arr[j];//split pint index    if (leftsum == rightsum)        return i + 1;}//if not possible returnreturn -1;}// driver codepublic static void main(String[] args) {    int[] array1 = { -3, 8, 3, 1, 1, 3 };    System.out.println(findindex(array1));}
查看完整描述

2 回答

?
繁星coding

TA贡献1797条经验 获得超4个赞

您可以使用以下代码来解决问题


static void Main(string[] args)

        {

            int[] array1 = {-3, 8, 3, 1, 1, 3}; // { -3, 8, 3, 1, 1, 3, 6, 1, 19 };

            int indexPosition = GetIndex(array1);

            if (indexPosition != -1)

            {

                Console.WriteLine(indexPosition);

            }

        }


        static int GetIndex(int[] param)

        {

            if (param.Length < 0) return -1;

            int leftSum = 0, rightSum = 0; int rightIndex = param.Length - 1;

            for (int i = 0; i < param.Length; i++)

            {

                if (i < rightIndex)

                {

                    if (leftSum > rightSum)

                    {

                        rightSum += param[rightIndex];

                        rightIndex -= 1;

                    }

                    else

                    {

                        if (i < rightIndex)

                        {

                            leftSum += param[i];

                        }

                    }

                }

                else

                {

                    rightSum += param[rightIndex]; // if you are looking for only index position you can comment this line,

                    //variable rightSum and leftSum will give you the sum of left and right side of the array

                    rightIndex -= 1;

                    break;

                }

            }


            return rightIndex;

        }

希望这可以帮助 。


查看完整回答
反对 回复 2023-04-13
?
郎朗坤

TA贡献1921条经验 获得超9个赞

您的代码有两个问题。一是变量i在同一个方法中被定义了两次。另一个问题是您只提供一个输入参数而不是两个。我什至不知道 x 应该是什么参数,因此也从我的改进版本中删除了它。我还删除了 while 循环,因为我不明白你在那里试图做什么。无论如何,这是我的代码版本:


public static int findindex(int arr[]) {

    if (arr == null) {

        return -1;

    }


    int len = arr.length;

    int leftsum = 0;

    for(int i = 0; i < len; i++)

    {

        leftsum += arr[i];

        int rightsum = 0;

        for(int j = i+2; j < len; j++)

            rightsum += arr[j];

        if(leftsum == rightsum)

            return i+1;

    }

    return -1;

}


public static void main(String[] args) {

    int[] array1 = {-3, 8, 3, 1, 1, 3};

    System.out.println(findindex(array1));

}

当我从你的代码中删除所有不必要的东西时,唯一的错误是你应该用 i+2 初始化 j,因为如果我理解你的要求,你不想在索引本身和右侧包含元素正确编码。


查看完整回答
反对 回复 2023-04-13
  • 2 回答
  • 0 关注
  • 95 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信