-------
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() 做一道题就可以复习好多知识 |