[黑马程序员](第5天)今晚做的一道题

------- android培训java培训、期待与您交流! ----------


有一个数字串array,包含100个正数和负数随机分布,要找到他的一个子串array[i...j]

(0<=i<=j<=100),使得在arry的所有子串中,array[i...j]的和最大,比如:串{1,-3,5,-2,6}的最大子串为{5,-2,6}

思路:
先一个嵌套循环,得出所有的子串(这里要用到数组的切割),然后再将每一个子串的和加起来
(有点类似于选择排序的那个意思)
代码:
public class Test02 {
        public static void main(String[] args){}
        public int[] maxChildArr(int[] arr){
                for(int i ; i <100 ; i ++){
                        for(int j = i +1 ; j <101  ; j++){
                                //获取分割后的所有数组
                                int[] intArray = Arrays.copyOfRange(arr,i,j);
                                //遍历求和
                                ArrayList al = new ArrayList(Arrays.asList(intArray));
                                Iterator iterator = al.iterator();
                                int count ; 
                                while(iterator.hasNext()){
                                        count += iterator.next();
                                }
                                //然后将intArray和count都放在一个集合中,两者对应的序号一致,就可以找到最值并且知道对应哪个子数组

                                //将arrayList转为int[]
                                int[] intArray = al.toArray();
                                //利用泛型,把数组放在一个集合里
                                LinkedList<int[]> ll = new LinkedList()<int[]>;
                                ll.add(intArray);
                        
                                //存入count到一个集合中
                                ArrayList arrList = new ArrayList();
                                arrList.add(count);
                        }
                }
                //好像没有直接求数组最大值的api
                int[] i = arrList.toArray();
                int[] ii = i.sort();
                int max  = ii[ii.length -1];
        
                int index=  Arrays.binarySearch(i,max);
                
                int[] target = ll.get(index);
                return target;
                        
        }



本题小结:
几个点:
(1):知识点:数组,Arrays类(其实有学过,但是很容易忘记)
(2):思路,实现方法



这里要特别注意数组的使用:


0.打印java数组的元素:
int[] intArray = {1,2,3,4,5};
String intArrayString = Arrays.toString(intArray);

System.out.println(intArray);
System.out.println(intArrayString);

第一行的结果:[@715obd4d,因为这仅仅是一个地址引用
第二行的结果:[1,2,3,,4,5],因为它经过了Arrays.toString()的转化


1.从Array中创建List:
List list = Arrays.asList(arr);

2.从Array中创建ArrayList:
好处:ArrayList是动态链表,可以更加方便地进行增删改差
注意这里要用到泛型
ArrayList arrList = new ArrayList(Arrays.asList(arr));

3.判断一下数组是否存在某个元素
复习一下集合类:
Collection下面有俩主要接口:List和Set
而List的主要实现类是ArrayList,LinkedList和Vector
boolean contains(Object  o)是Collection的一个方法了

boolean b = Arrays.asList(arr).contains(3);
//boolean b = Arrays.asList(arr).contains("feriosa");
也就是说,所谓数组,并不是只能是整数的集合,也能是其他数据类型,如浮点数和字符串

4.两个数组的连接:

int[] arr= ArrayUtils.addAll(arr1,arr2);

ArrayUtils是一个类似Arrays的工具类,也是数组专用

5.将Array转化为Set集合:

先复习一下List和Set之间的转化:
List list = new ArrayList(set);
Set set = new HashSet(list);

这俩类的构造方法可以互传的= =

Set set = new HashSet(Arrays.asList(arr));

6.数组翻转:
依然是ArrayUtils中的方法:
int[] arr = { 22,33,44,55,66};
int[] i = ArrayUtils.reverse(arr);
System.out.println(Arrays.toString(i));

7.从数组中移除一个元素:
这种方法就不少了:
1)转化为List类,然后执行增删改差操作
2)用ArrayUtils来直接操作数组

int[] removed = ArrayUtils.removeElement(arr,0);



Arrays工具类---专属于数组的工具类
sort(),binarySearch(int[] a , int key),copuOfRange(int[] original,int from,int to)---这个方法的名字很搞笑,但很重要,
fill(int[] arr,int val)---val把数组中所有的数都替换了,toString(int[] arr);
最后还有一个很重要的方法:
asList(int[] arr)---实现数组与动态链表的转换



发散出去:
所有Object的子类都有四个共有方法:
finalized()---被回收前调用
toString()
equals()
hashCode()


做一道题就可以复习好多知识
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android是一种基于Linux内核(不包含GNU组件)的自由及开放源代码的移动操作系统,主要应用于移动设备,如智能手机和平板电脑。该系统最初由安迪·鲁宾开发,后被Google公司收购并注资,随后与多家硬件制造商、软件开发商及电信营运商共同研发改良。 Android操作系统的特点包括: 开放源代码:Android系统采用开放源代码模式,允许开发者自由访问、修改和定制操作系统,这促进了技术的创新和发展,使得Android系统具有高度的灵活性和可定制性。 多任务处理:Android允许用户同时运行多个应用程序,并且可以轻松地在不同应用程序之间切换,提高了效率和便利性。 丰富的应用生态系统:Android系统拥有庞大的应用程序生态系统,用户可以从Google Play商店或其他第三方应用市场下载和安装各种各样的应用程序,满足各种需求。 可定制性:Android操作系统可以根据用户的个人喜好进行定制,用户可以更改主、小部件和图标等,以使其界面更符合个人风格和偏好。 多种设备支持:Android操作系统可以运行在多种不同类型的设备上,包括手机、平板电脑、智能电视、汽车导航系统等。 此外,Android系统还有一些常见的问,如应用崩溃、电池耗电过快、Wi-Fi连接问、存储空间不足、更新问等。针对这些问,用户可以尝试一些基本的解决方法,如清除应用缓存和数据、降低屏幕亮度、关闭没有使用的连接和传感器、限制后台运行的应用、删除不需要的文件和应用等。 随着Android系统的不断发展,其功能和性能也在不断提升。例如,最新的Android版本引入了更多的安全性和隐私保护功能,以及更流畅的用户界面和更强大的性能。此外,Android系统也在不断探索新的应用场景,如智能家居、虚拟现实、人工智能等领域。 总之,Android系统是一种功能强大、灵活可定制、拥有丰富应用生态系统的移动操作系统,在全球范围内拥有广泛的用户基础。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值