java语言写题常用
2021/11/20 14:10:51
本文主要是介绍java语言写题常用,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
map排序
//这里将map.entrySet()转换成list List<Map.Entry<Integer,Integer>> list = new ArrayList<Map.Entry<Integer,Integer>>(map.entrySet()); //然后通过比较器来实现排序 Collections.sort(list,new Comparator<Map.Entry<Integer,Integer>>() { //升序排序 public int compare(Map.Entry<Integer, Integer> o1, Map.Entry<Integer, Integer> o2) { if(o1.getKey() > o2.getKey()){ return 1; }else if(o1.getKey() < o2.getKey()){ return 0; }else{ return o2.getValue() - o1.getValue(); } } }); for(Map.Entry<Integer,Integer> m:list){ System.out.println(m.getKey()+":"+m.getValue()); } return null; //=======================分割线======================= Map<Integer , Integer> map = new TreeMap<>(); //自定义比较器 Comparator<Map.Entry<Integer, Integer>> valCmp = new Comparator<Map.Entry<Integer,Integer>>() { @Override public int compare(Map.Entry<Integer, Integer> o1, Map.Entry<Integer, Integer> o2) { return o2.getValue()-o1.getValue(); } }; for(int i = 0 ; i < nums.length ; i++){ if(map.containsKey(nums[i])){ map.put(map.get(nums[i]) , map.get(nums[i]+1)); }else{ map.put(nums[i] , 1); } } //将map转成List,map的一组key,value对应list一个存储空间 List<Map.Entry<Integer, Integer>> list = new ArrayList<Map.Entry<Integer,Integer>>(map.entrySet()); //传入maps实体 Collections.sort(list,valCmp); // 注意此处Collections 是java.util包下面的,传入List和自定义的valCmp比较器 int[] res = new int[k]; for(int i = 0 ; i < k ; i++) { res[i] = list.get(i).getValue(); } return res;
数组排序
Arrays.sort(people, (int[] o1, int[] o2) ->{ if(o2[0] == o1[0]){ return o2[1] - o1[1]; }else{ return o1[0] - o2[0]; } });
数组赋值
Arrays.fill(f,Integer.MAX_VALUE);
Map构建(不要再先判断有无值再put了)
public int findLHS(int[] nums) { Map<Integer, Integer> map = new HashMap<>(); for (int i : nums) map.put(i, map.getOrDefault(i, 0) + 1); int ans = 0; for (int i : nums) { if (map.containsKey(i - 1)) { ans = Math.max(ans, map.get(i) + map.get(i - 1)); } } return ans; }
数组排序2(由大到小)(不建议使用,但是我记得有面经问过这种流的使用)
//数组元素转换为数值流 IntStream stream = Arrays.stream(nums); //流中元素全部装箱 Stream<Integer> st = stream.boxed(); //将流转换为数组 Integer[] num = st.toArray(Integer[]::new); Arrays.sort(num , Collections.reverseOrder());
DFS常用
List<String> res = new ArrayList<>(); LinkedList<String> path = new LinkedList<>(); public List<String> binaryTreePaths(TreeNode root) { dfs(root); return res; } public void dfs(TreeNode root){ if(root == null) return ; path.add(String.valueOf(root.val)); if(root.left == null && root.right == null) { res.add(String.join("->", path)); } dfs(root.left); dfs(root.right); path.removeLast(); }
寻找环/寻找相同元素(其实就想记录下数组模拟链表的例子)
/** * 通过寻找链表中环的方式 时间复杂度为O(n) * @param nums * @return */ public int findDuplicate(int[] nums) { int a = 0; int b = 0; while (true){ a = nums[a]; b = nums[nums[b]]; if (a == b){ a = 0; while (a != b){ a = nums[a]; b = nums[b]; } return a; } } }
层序遍历二叉树顺便记录每层节点数量
public int findBottomLeftValue(TreeNode root) { TreeNode res = new TreeNode(); Queue<TreeNode> queue = new LinkedList(); queue.add(root); int size = 0 ; while (!queue.isEmpty()){ int num = 0; for(int i = 0; i < size; i++){ TreeNode node = queue.poll(); if(i == 0) res = node; if(node.left != null ){ num ++; queue.add(node.left); } if(node.right != null){ num ++; queue.add(node.right); } } size = num; } return res.val; }
未完待补充
这篇关于java语言写题常用的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-09-28微服务架构中API版本控制的实践
- 2024-09-28AI给的和自己写的Python代码,都无法改变输入框的内容,替换也不行
- 2024-09-27Sentinel配置限流资料:新手入门教程
- 2024-09-27Sentinel配置限流资料详解
- 2024-09-27Sentinel限流资料:新手入门教程
- 2024-09-26Sentinel限流资料入门详解
- 2024-09-26Springboot框架资料:初学者入门教程
- 2024-09-26Springboot框架资料详解:新手入门教程
- 2024-09-26Springboot企业级开发资料:新手入门指南
- 2024-09-26SpringBoot企业级开发资料新手指南