数组切片算法

题目如下:就是一个数组,切三刀,从这三个切口组成的四个切片的整数和是否能够四等分,如果可以,就返回true,不行就返回false。

主要的思路就是记着三个切点为m1,m2,m3(和是不包括m1 m2 和m3的),则先找m1,m2,头尾的和相等后,记为count,利用count以及m1,m3来查找m2。其中的细节在于,第一次找到的count不一定是对的,这样需要扩大count 继续寻找。具体代码如下。

代码实现如下

 1 package p2;
 2
 3 public class ali {
 4
 5     // 数组切片。
 6     public boolean   fun (int [] A){
 7         int len=A.length;
 8         if(len<=3) return false;
 9         int i=0;int j=len-1;
10         int count1=A[i];
11         int count2=A[j];
12         boolean check;
13         while(i<j){
14             if(count1<count2){
15                 i++;
16                 count1+=A[i];
17             }
18             if(count1>count2){
19                 j--;
20                 count2+=A[j];
21             }
22             else{
23                 i++;
24                 j--;
25                 check=check( A,i,j,count1);
26                 if(check){   //如果找到了m2 直接返回true
27                     return check;
28                 }
29                 else{
30                     count1+=A[i];  //如果找不到符合条件的m2 则增大count 继续查找
31                     count2+=A[j];
32
33                 }
34             }
35
36         }
37         return false;
38     }
39     public boolean check(int [] A,int i,int j,int sum){
40           int l =i+1;
41           int r=j-1;
42           int left=A[l],right =A[r];
43           while(l<r){
44               if(left<right){
45                   l++;
46                   left+=A[l];
47               }
48               if(left>right){
49                   r++;
50                   right+=A[r];
51               }
52               else if(left==right){
53                   if(left==sum&&r-l==2){   //注意这里的条件 找到的r 和l相当于m2+1和m2-1 相差2这个条件需要满足
54                       return true;
55                   }
56                   if(left<sum){   //如果比传进来的sum小的话就增加和
57                       l++;left+=A[l];
58                       r--;right+=A[r];
59                   }
60                   else return false;  //都不满足的话 就就表示无法找到 可能需要增加上一级的count或者是不满足条件了。
61               }
62           }
63         return false;
64
65     }
66 }
时间: 2024-08-24 12:25:44

数组切片算法的相关文章

[翻译] NumSharp的数组切片功能 [:]

原文地址:https://medium.com/scisharp/slicing-in-numsharp-e56c46826630 翻译初稿(英文水平有限,请多包涵): 由于Numsharp新推出了数组切片这个牛逼的功能,所以.NET社区距离拥有强大的开源机器学习平台又近了一步. Python之所以是机器学习的首选语言,部分原因就是因为它拥有一些牛逼的库,例如NumPy和Tensorflow.与此同时,C#开发人员也迫切需要用于机器学习和数据科学的强大开源库.而NumSharp,这个由 SciS

集合框架之数组集合算法

如何检测程序的健康程度? 如果想要知道程序运行所占的CPU和内存的情况可以使用飞行器,这样就可以知道程序的稳定性了.在JDK的bin目录下可以找到飞行器.如下图: 数组集合算法: 1.数组与集合的区别和联系: 数组是有限存储(规定了数组长度就只能存储那么多值),而集合是无限存储,但其实集合也是由数组做成的. 2.数组集合算法的原理: 当向集合里面存储一个值时,集合里面会为其申请一个适当长度的数组来存储,第二次存储值时,如果数组的长度不足以存储第二次的值,就重新申请一个长一点的数组,先把原来的数组

javascript数组去重算法-----4(另一种写法)

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>javascript数组去重算法-----3</title> 6 </head> 7 <body> 8 <script> 9 var arr = [1,1,2,2,3,2,2,3,3,1,1,4,4,5

javascript数组去重算法-----4(另一种写法__2)

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>javascript数组去重算法-----3</title> 6 </head> 7 <body> 8 <script> 9 var arr = [1,1,2,2,3,2,2,3,3,1,1,4,4,5

javascript数组去重算法-----5

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>javascript数组去重算法-----3</title> 6 </head> 7 <body> 8 <script> 9 var arr = [1,1,2,2,3,2,2,3,3,1,1,4,4,5

javascript数组去重算法-----3

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>javascript数组去重算法-----3</title> 6 </head> 7 <body> 8 <script> 9 var arr = [1,1,2,2,3,2,2,3,3,1,1,4,4,5

javascript数组去重算法-----2

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>javascript数组去重算法-----2</title> 6 </head> 7 <body> 8 <script> 9 var arr = [1,1,2,2,3,2,2,3,3,1,1,4,4,5

javascript数组去重算法-----1

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>javascript数组去重算法-----1</title> 6 </head> 7 <body> 8 <script> 9 var arr = [1,1,2,2,3,2,2,3,3,1,1,4,4,5

窥探Swift之数组安全索引与数组切片

在Swift中的数组和字典中下标是非常常见的,数组可以通过索引下标进行元素的查询,字典可以通过键下标来获取相应的值.在使用数组时,一个常见的致命错误就是数组越界.如果在你的应用程序中数组越界了,那么对不起,如果由着程序的性子的话是会崩溃的.为了防止崩溃呢,我们会对集合做一些安全的处理.比如对数组进行扩展,从而对数组的索引进行安全检查,保证数组的index在正常范围内.在Objective-C中也是经常对数组,字典等做一些处理操作. 今天的博客的主要内容是先对Objective-C中常用集合的安全