亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將數組拆分為兩個相等的子數組,其中選擇了索引

將數組拆分為兩個相等的子數組,其中選擇了索引

慕姐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 關注
  • 134 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號