![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
排序
Huiex胖子君
广告位招租
展开
-
剑指 Offer 45. 把数组排成最小的数
排序题主要问题就是如何排序,排序的规则(o1+o2).compareTo(o2+o1)即 判断两个数不同顺序相加比较大小整体思路流程在注解中加油 public static String minNumber(int[] nums) { /** 将整数数组转换为字符串数组*/ String[] strArr = new String[nums.length]; int i = 0; for (int num :原创 2021-11-25 16:57:54 · 61 阅读 · 0 评论 -
剑指 Offer 40. 最小的k个数(堆排序法)
用sort的方法就不写了,没有什么意义下面代码为堆排序的解法思路都在代码注解中了,用堆挺简单的,还是调用API,没什么要说的注意要重优先队列的比较方法public int[] getLeastNumbers(int[] arr, int k) { if (k == 0){ return new int[0]; } /** 创建一个大根堆,size为k,将数组元素存入堆中, * 如果比堆顶还要到,就直接跳过,原创 2021-11-25 15:28:41 · 69 阅读 · 0 评论 -
剑指 Offer 03. 数组中重复的数字
用HashMap的解法就不多说了另一种解法 原地交换 空间复杂度为1 public int findRepeatNumber(int[] nums) { /** 如果该数组没有重复的数时,每一个索引都对应着唯一的那个数 * 但是现在一个数对应多个索引 * 通过交换,使索引和数值一一对应,做到类似于字典的作用*/ int i = 0; while (i < nums.length){原创 2021-11-24 19:41:55 · 280 阅读 · 0 评论 -
剑指 Offer 39. 数组中出现次数超过一半的数字
用个map就搞定了,注意lenght为1 时的情况先判断是否有这个key,如果没有value设为1如果有 value+1public static int majorityElement(int[] nums) { /** 创建一个HashMap key用来存放数组元素,value用来存放出现次数*/ if (nums.length == 1){ return nums[0]; } HashMap<Inte原创 2021-11-24 16:55:19 · 263 阅读 · 0 评论 -
剑指 Offer 61. 扑克牌中的顺子
就直接暴力就可以了,就5个数设置一个标记,用来记录大小王的数二种情况如果有两个牌相同,就直接返回如果两个牌之间的跨度超过了王牌的数量,也直接返回truepublic static boolean isStraight(int[] nums) { /** 先将nums排序*/ Arrays.sort(nums); int mark = 0; /** for循环判断是否连续 如果为0 直接跳过*/ for (int原创 2021-11-24 15:37:45 · 259 阅读 · 1 评论