剑指offer计划16( 排序简单)-

剑指offer计划16( 排序简单)-

1.1、题目1

剑指 Offer 45. 把数组排成最小的数

1.2、解法

这题看的题解,发现自己思路错了。
这里直接拿大佬的题解来讲吧。
一开始这里就把创一个string的数组来存int数组
String.valueOf将int转为string存进数组。
这里应该排序,题解中用到了lambda表达式,判断条件是x+y是否大于y+x
然后添加金stringbuilder然后转成字符串返回。

1.3、代码

class Solution {
    public String minNumber(int[] nums) {
        String[] strs = new String[nums.length];
        for(int i = 0; i < nums.length; i++)
            strs[i] = String.valueOf(nums[i]);
        Arrays.sort(strs, (x, y) -> (x + y).compareTo(y + x));
        StringBuilder res = new StringBuilder();
        for(String s : strs)
            res.append(s);
        return res.toString();
    }
}

2.1、题目2

剑指 Offer 61. 扑克牌中的顺子

2.2、解法

这是通过判断五个值最大值减去最小值是否小于5,
通过哈希表来判断是否重复,如果有重复的值则不是顺子。
也可以先数组排序后,取最大值和排序后除零外的最小值来比较。

2.3、代码

class Solution {
    public boolean isStraight(int[] nums) {
        Set<Integer> s = new HashSet();
        int max=0,min=14;
        for(int i=0;i<nums.length;i++){
            if(nums[i]==0) continue;
            max = Math.max(max,nums[i]);
            min = Math.min(min,nums[i]);
            if(s.contains(nums[i])) return false;
            s.add(nums[i]);
        }
        return (max-min)<5;
    }
}

hmoban主题是根据ripro二开的主题,极致后台体验,无插件,集成会员系统
自学咖网 » 剑指offer计划16( 排序简单)-