摘要:有时候面对算法的瞬间就会忘掉有什么简便的方法达到目的。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:以上均为个人理解,如有错误欢迎指正…^_^