栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

剑指offer——第十六天

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

剑指offer——第十六天

剑指offer——第十六天
    • 第一题:
      • 问题描述
      • 思路
      • 代码
      • 疑难函数
        • PriorityQueue
        • compareTo
    • 第二题:剑指 Offer 61. 扑克牌中的顺子
      • 问题描述
      • 思路
      • 代码

第一题: 问题描述


思路

利用堆排序可

代码
class Solution {
    public String minNumber(int[] nums) {
        Queue  queue = new PriorityQueue<>(new Comparator(){       
        public int compare(String a,String b){
            return (a+b).compareTo(b+a);
        }
        });
        for(int num : nums){
            queue.add("" + num);
        }
        StringBuilder res = new StringBuilder();
        while(!queue.isEmpty()){
            res.append(queue.poll());
        }
        return res.toString();
    }
}
疑难函数 PriorityQueue
特殊的队列叫做PriorityQueue,即优先队列。优先队列的作用是能保证每次取出的元素都是队列中权值最小的(Java的优先队列每次取最小元素,C++的优先队列每次取最大元素)。这里牵涉到了大小关系,元素大小的评判可以通过元素本身的自然顺序(natural ordering),也可以通过构造时传入的比较器(Comparator,类似于C++的仿函数)。
Java中PriorityQueue实现了Queue接口,不允许放入null元素;其通过堆实现,具体说是通过完全二叉树(complete binary tree)实现的小顶堆(任意一个非叶子节点的权值,都不大于其左右子节点的权值),也就意味着可以通过数组来作为PriorityQueue的底层实现。
compareTo

compareTo() 方法用于两种方式的比较:

字符串与对象进行比较。
按字典顺序比较两个字符串。

第二题:剑指 Offer 61. 扑克牌中的顺子 问题描述

思路 代码
class Solution {
    public boolean isStraight(int[] nums) {
        Arrays.sort(nums);
        int count = 0;
        for(int i=0;i<4;i++){
            if(nums[i]==0) count++;
            else if(nums[i] == nums[i+1]) return false; 
        }
        return nums[4]-nums[count] < 5;
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/433381.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号