java吧 关注:1,233,551贴子:12,699,235

java编程题

只看楼主收藏回复

给一个int型数组A,找到三个下标(m,n,q),将数组分为四部分,使得A[0]到A[m-1],A[m+1]到A[n-1],A[n+1]到A[q-1],A[q+1]到A[A.length-1]这四部分的和相等,如果满足则返回true,反之,则返回false,例如A=[2,5,1,1,1,1,4,1,7,3,7]可以找到下标2,7,9所以返回true,相等区间的和为7


IP属地:四川来自Android客户端1楼2017-03-14 16:09回复
    有没有大牛讲一下这个题怎么做


    IP属地:四川来自Android客户端2楼2017-03-14 16:10
    回复
      有没有大神些??


      IP属地:四川来自Android客户端3楼2017-03-14 16:11
      回复
        有大神会的吗??


        IP属地:四川来自Android客户端4楼2017-03-14 16:12
        回复
          有大神会吗???


          IP属地:四川来自Android客户端5楼2017-03-14 16:13
          回复
            来人~~~来大神~~


            IP属地:四川来自Android客户端6楼2017-03-14 16:16
            回复
              初学菜鸟


              来自Android客户端7楼2017-03-14 16:16
              收起回复
                有没有大神会的呢!??!


                IP属地:四川来自Android客户端8楼2017-03-14 16:20
                回复
                  先求数组和sum,然后从第一个开始往后走并记录小组和sum1,当sum1达到sum/4时,留下标记,sum1清零继续往后走,重复上一步直到走完。如果sum1出现跳过sum/4的情况,就返回false


                  IP属地:河南9楼2017-03-14 16:25
                  收起回复
                    有没有会的大神呢??


                    IP属地:四川来自Android客户端10楼2017-03-14 16:29
                    回复
                      来人来大牛~


                      IP属地:四川来自Android客户端11楼2017-03-14 16:31
                      回复
                        有人吗???


                        IP属地:四川来自Android客户端12楼2017-03-14 16:33
                        回复
                          有没有大神呢??


                          IP属地:四川来自Android客户端13楼2017-03-14 16:44
                          回复
                            public static void t1() {
                            int[] arr = new int[]{2,5,1,1,1,1,4,1,7,3,7};
                            boolean flag = false;//标识,标识是否找得到m,n,q
                            //使得A[0]到A[m-1],A[m+1]到A[n-1],A[n+1]到A[q-1],A[q+1]到A[A.length-1]这四部分的和相等
                            for(int m=1;m<arr.length-1;m++) {
                            for(int n=3;n<arr.length-1;n++) {
                            for(int q=5;q<arr.length-1;q++) {
                            //计算A[0]到A[m-1]的和
                            int sum1 = 0;
                            for(int i=0;i<=m-1;i++) {
                            sum1 = sum1+arr[i];
                            }
                            //计算A[m+1]到A[n-1]的和
                            int sum2 = 0;
                            for(int i=m+1;i<=n-1;i++) {
                            sum2 = sum2+arr[i];
                            }
                            //计算A[n+1]到A[q-1]的和
                            int sum3 = 0;
                            for(int i=n+1;i<=q-1;i++) {
                            sum3 = sum3+arr[i];
                            }
                            //计算A[q+1]到A[A.length-1]的和
                            int sum4 = 0;
                            for(int i=q+1;i<arr.length;i++) {
                            sum4 = sum4+arr[i];
                            }
                            if(sum1 == sum2 && sum2 == sum3 && sum3 == sum4) {
                            System.out.println("true");
                            System.out.println("下标为:"+"["+m+","+n+","+q+"]");
                            flag = true;//找到之后,把flag变成true
                            }
                            }
                            }
                            }
                            if(flag==false) {
                            System.out.println("false");
                            }
                            }


                            14楼2017-03-14 16:47
                            回复
                              package com.liberty.test;
                              import java.util.Arrays;
                              import org.junit.Test;
                              public class SomeTest {
                              public int[] quarterArray(int[] nums) {
                              if (nums.length < 7) {
                              return null;
                              }
                              int[] sum = new int[nums.length];
                              sum[0] = nums[0];
                              for (int i = 1; i < nums.length; i++) {
                              sum[i] += sum[i - 1] + nums[i];
                              }
                              int low = 0;
                              int high = nums.length - 1;
                              int firstSum = nums[low++];
                              int lastSum = nums[high--];
                              while (low + 4 <= high) {
                              if (firstSum < lastSum) {
                              firstSum += nums[low++];
                              }
                              else if (firstSum > lastSum) {
                              lastSum += nums[high--];
                              }
                              else {
                              int l = low + 1;
                              int h = high - 1;
                              while (l <= h) {
                              int m = (l + h) >> 1;
                              int secSum = sum[m - 1] - sum[low];
                              int thdSum = sum[high - 1] - sum[m];
                              if (secSum > thdSum) {
                              h = m - 1;
                              }
                              else if (secSum < thdSum) {
                              l = m + 1;
                              }
                              else {
                              if (secSum == firstSum) {
                              return new int[]{low, m, high};
                              }
                              else {
                              firstSum += nums[low++];
                              break;
                              }
                              }
                              }
                              }
                              }
                              return null;
                              }
                              @Test
                              public void test1() {
                              System.out.println(Arrays.toString(quarterArray(new int[]{2,5,1,1,1,1,4,1,7,3,7})));
                              }
                              }


                              IP属地:四川15楼2017-03-14 16:48
                              收起回复