• 数组,集合常见遗忘宝典


    摘要:有时候面对算法的瞬间就会忘掉有什么简便的方法达到目的。First:算法中时间复杂度的大致计算,时间复杂度对算法的影响。Second:如何快速的进行数组集合之间的转换。Third:如何对数组元素用最简洁的方法排序。Fourth:在列表元素全部为0的情况下,怎么不被误判为空。Fifth:如何确定一个数组或者集合中的元素全部相同(或等于0或不等于0)。。。。。等等很多时候就会忘记,因此做个笔记整理下这些知识,同时分享分享。

    一、判断数组,列表,集合是否元素全部为0或其他数

    List集合:
    Set<Integer> set=new HashSet<>();//首先对list去重----set集合的特性
            set.addAll(list);
            if (set.size()==1 && set.equals("0")) {//然后看size的值,接着判断值是否为某个特定的数
                System.out.println(list.toString());
            }
    数组:int[] nums={1,3,6,4,3}
    List<Integer> list = new ArrayList<Integer> ();//遍历数组元素到集合
            for (int i = 0; i < nums.length; i++) {
                list.add(nums[i]);
            }
    //下一步和之前一样---重排---判断
    
    Set<Integer> set=new HashSet<>();
            set.addAll(list);
            if (set.size()==1 && set.equals("0")) {            
                System.out.println(list.toString());
            }

    二、数组集合快速转换:

    集合到数组:

    List<Integer>  list1 = new ArrayList<Integer> ();
    list1.toArray();//就可迅速的进行转换

    数组到集合:

    List<Integer> list = new ArrayList<Integer> ();    
            for (int i = 0; i < nums.length; i++) {
                list.add(nums[i]);
            }
    //或者
    Arrays.aslist();-------------------但是转换后不能增删,只能用于遍历

    三、数组、集合排序:

    对于数组,一般的方法大都是进行快速排序,或者冒泡排序什么的,但既然说到简便,我们可以借助Arrays.sort---java自带函数(默认字典序)。
    int[] nums = {1,0,7,9,5};
    Arrays.sort(nums);

    四、在数组元素全部为0的情况下,怎么不被判断为空(null和0)

    如果一个集合或者数组元素全部为0,在很多情况下if判断不注意就会将内容判定为null,怎么避免呢?

    if (nums == null && nums.length > 1) {};
    if(nums.equals(null) && nums.length>1){}

    五、判断某个多维集合中是否含有某个集合

    List<List<Integer>> list1= new ArrayList<List<Integer>>();
    List<Integer> list = new ArrayList<Integer> ();
    //这样在添加时就会知道是否重复,可以去掉重复
    if ( list1.contains(list)) {
                            list0.add(list1);
                            System.out.println(list1);
                        }

    六、时间复杂度的简单计算

    一般的就看for循环:

    在最坏的情况下,一般一个for循环对于遍历n个数来说就是O(n),两个for循环就是O(n^2),三个O(n^3)。。。。。。

    那么时间复杂度对算法有什么影响呢?比如你要遍历100个数,做到全部遍历一次for循环就是100,两次就是100*100,三次就是100*100*100,这只是小数据,当你的n变大到10000呢、100000^3执行次数变成这么多,计算机的承受压力可想而知。

    while循环:

    举个简单的例子:

    int i=1; 
    while(i<=n){
     i=i*2
    }

    假设执行次数是x,条件是n:

    i=2^x<=n;
    那么:
    2^x <= n
    所以x <= logn
    因此x 从1 到logn,一共执行循环体logn次,所以复杂度是logn

    ps:以上均为个人理解,如有错误欢迎指正…^_^

  • 相关阅读:
    正则表达式元字符查询
    重置SQLSERVER表的自增列,让自增列重新计数
    C#byte类型
    C#编程,TreeView控件的学习
    20个常用正则表达式
    .jquery中$.get()提交和$.post()提交有区别吗?
    JQuery有几种选择器?
    undefined,null 和 undeclared 有什么区别
    根据你以往的经验简单叙述一下MYSQL的优化
    什么是 JavaConfig?
  • 原文地址:https://www.cnblogs.com/wangsr-suc/p/9005416.html
Copyright © 2020-2023  润新知