LeetCodeアルゴリズム、1日1つの質問、Alibabaに影響、day6

1.LeetCode228.要約間隔

トピック

繰り返し要素のない順序付けられた整数配列numsが与えられます。
配列内のすべての数値を正確にカバーする最小の順序付き間隔範囲のリストを返します。つまり、numsのすべての要素は、ある区間範囲によって正確にカバーされ、ある範囲に属しているがnumsには属していない数値xはありません。
入力:nums = [0,1,2,4,5,7]
出力:["0-> 2"、 "4-> 5"、 "7"]

Xiaobianクッキングソリューション

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.LeetCode231.2の力

トピック

整数nが与えられた場合、整数が2の累乗であるかどうかを判断してください。そうである場合はtrueを返し、そうでない場合はfalseを返します。
n == 2xのような整数xがある場合、nは2の累乗と見なされます。

Xiaobianクッキングソリューション

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が正の整数であり、nnの2進表現に11個の11しか含まれていない場合に限り、数nnは22の累乗です。
したがって、ビット演算を使用してnnのバイナリ表現の下位11を抽出し、残りの値が00であるかどうかを判断することを検討できます。n&(n-1)
ここで、\ texttt {&}&はビット単位のAND演算を意味します。このビット演算トリックは、nnのバイナリ表現の最下位ビット11を直接削除できます。

国を指す大ボス

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

バイナリは、ああ恥ずかしい、演奏があまり得意ではありません。

3.LeetCode205.有効な文字アナグラム

トピック

2つの文字列sとtが与えられた場合、tがsのアナグラムであるかどうかを判別する関数を記述します。
注:sとtの各文字が同じ回数出現する場合、sとtは互いのアナグラムと呼ばれます。

Xiaobian問題解決のアイデア

すべての文字の数を取り出してマップに入れます.2つの文字列がアナグラムの場合、マップは等しくなければなりません。

Xiaobianクッキングソリューション

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は、「等しくソートされた2つの文字列」に相当する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列ディレクトリ|ここをクリック

ここに画像の説明を挿入

4.パブリックアカウントのNezhaプログラミングに従い、1024に返信し、マインドマップを取得し、不規則な本の配達活動を行います

  1. エントリーからプロジェクト戦闘までのJava(フルビデオバージョン)
  2. NoSQLデータベースの紹介と実践(MongoDB、Redisに基づく)
  3. Node + MongoDB+Reactプロジェクト開発
  4. エントリーから実際の戦闘までVue.js3.0を簡単に習得できます(ケース、ビデオ、カラーバージョン)
    ここに画像の説明を挿入

公開番号に注意してください:Nezhaプログラミング

Nezhaプログラミングは毎週高品質の記事を更新しています。注意を払った後、[CSDN]に返信して、Javaマインドマップ、Java学習資料、および大規模なインタビュー資料を受け取ります。

 

私にWeChatを追加してください:18525351592

あなたを技術交換グループに引き込みます。グループには多くの技術的な大物があり、技術を一緒に交換し、一緒に前進し、一緒に大きな工場に入り、技術書を無料で購入します~~

おすすめ

転載: blog.csdn.net/guorui_java/article/details/124186857
おすすめ