LeetCode算法,每日一题,冲击阿里巴巴,day6

目录

    • 1、LeetCode 228.汇总区间
      • 题目
      • 小编菜解
      • 大佬指点江山
    • 2、LeetCode 231.2的幂
      • 题目
      • 小编菜解
      • 思路分析
      • 大佬指点江山
    • 3、LeetCode 205.有效的字母异位词
      • 题目
      • 小编解题思路
      • 小编菜解
      • 思路分析
      • 大佬指点江山
      • ```为什么80%的码农做不了架构师?>>>```
      • [Java专栏目录 | 点击这里](https://blog.csdn.net/guorui_java/article/details/120098618)
    • 4、关注公众号哪吒编程,回复1024,获取思维导图,还有不定期的送书活动

1、LeetCode 228.汇总区间

题目

给定一个无重复元素的有序整数数组 nums 。
返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表。也就是说,nums 的每个元素都恰好被某个区间范围所覆盖,并且不存在属于某个范围但不属于 nums 的数字 x 。
输入:nums = [0,1,2,4,5,7]
输出:[“0->2”,“4->5”,“7”]

小编菜解

public static List<String> summaryRanges(int[] nums) {
    int step = -1;
    int next = 0;
    int over = 0;
    int curren = 0;
    List<String> list = new ArrayList<>();
    for(int i = 0;i<nums.length;i++){
        int c = nums[i];
        if (i<=curren + step){
            continue;
        }
        curren = i;
        String temp = "";
        step = 0;
        if(i+1+step == nums.length){
            list.add(String.valueOf(c));
            break;
        }
        next = nums[i+1+step];
        while (next - c == 1+step){
            over = next;
            step++;
            if(i+1+step < nums.length){
                next = nums[i+1+step];
            }
        }
        if (step == 0){
            temp = String.valueOf(c);
        }else{
            temp += c + "->"+over;
        }
        list.add(temp);
    }
    return list;
}

够麻烦的啊,菜啊。

大佬指点江山

public static List<String> summaryRanges2(int[] nums) {
    List<String> ret = new ArrayList<String>();
    int i = 0;
    int n = nums.length;
    while (i < n) {
        int low = i;
        i++;
        while (i < n && nums[i] == nums[i - 1] + 1) {
            i++;
        }
        int high = i - 1;
        StringBuffer temp = new StringBuffer(Integer.toString(nums[low]));
        if (low < high) {
            temp.append("->");
            temp.append(Integer.toString(nums[high]));
        }
        ret.add(temp.toString());
    }
    return ret;
}

2、LeetCode 231.2的幂

题目

给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。
如果存在一个整数 x 使得 n == 2x ,则认为 n 是 2 的幂次方。

小编菜解

public static boolean isPowerOfTwo(int n) {
    if (n == 1){
        return true;
    }
    while (true){
        if (n/2 >1 && n%2==0){
            n = n/2;
        }else{
            if (n == 2){
                return true;
            }else{
                return false;
            }
        }
    }
}

思路分析

一个数 nn 是 22 的幂,当且仅当 nn 是正整数,并且 nn 的二进制表示中仅包含 11 个 11。
因此我们可以考虑使用位运算,将 nn 的二进制表示中最低位的那个 11 提取出来,再判断剩余的数值是否为 00 即可。n & (n - 1)
其中 \texttt{&}& 表示按位与运算。该位运算技巧可以直接将 nn 二进制表示的最低位 11 移除。

大佬指点江山

public boolean isPowerOfTwo(int n) {
    return n > 0 && (n & (n - 1)) == 0;
}

二进制还不太会玩,惭愧啊。

3、LeetCode 205.有效的字母异位词

题目

给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。

小编解题思路

取出所有字母的个数放入map,两个字符串如果是字母异位词,则map一定相等。

小编菜解

public static boolean isAnagram(String s, String t) {
    Map<Character,Integer> map = new HashMap<>();
    for (int i = 0; i < s.length(); i++) {
        char c = s.charAt(i);
        if(map.containsKey(c)){
            map.put(c,map.get(c)+1);
        }else{
            map.put(c,1);
        }
    }
 
    Map<Character,Integer> map2 = new HashMap<>();
    for (int i = 0; i < t.length(); i++) {
        char c = t.charAt(i);
        if(map2.containsKey(c)){
            map2.put(c,map2.get(c)+1);
        }else{
            map2.put(c,1);
        }
    }
    return map.equals(map2);
}

思路分析

t 是 ss 的异位词等价于「两个字符串排序后相等」。因此我们可以对字符串 ss 和 tt 分别排序,看排序后的字符串是否相等即可判断。此外,如果 ss 和 tt 的长度不同,tt 必然不是 ss 的异位词。

大佬指点江山

public static boolean isAnagram(String s, String t) {
    char[] c1 = s.toCharArray();
    char[] c2 = t.toCharArray();
    Arrays.sort(c1);
    Arrays.sort(c2);
    return Arrays.equals(c1,c2);
}

为什么80%的码农做不了架构师?>>>

Java专栏目录 | 点击这里

LeetCode算法,每日一题,冲击阿里巴巴,day6_第1张图片

4、关注公众号哪吒编程,回复1024,获取思维导图,还有不定期的送书活动

  1. Java从入门到项目实战(全程视频版)
  2. NoSQL数据库入门与实践(基于MongoDB、Redis)
  3. Node+MongoDB+React 项目实战开发
  4. 轻松学Vue.js 3.0从入门到实战 (案例·视频·彩色版)
    LeetCode算法,每日一题,冲击阿里巴巴,day6_第2张图片

你可能感兴趣的:(LeetCode,java)