leetcode-simple-共25题-02

26. 消失的数字

package com.lxh.simple;
/* 已通过 2021.10.12 时间5ms 击败33.41% 内存 38.9M 击败28.85%
*
*
*
* */
import java.util.Arrays;

public class MissingNumber0268 {
    public int missingNumber(int[] nums) {
        Arrays.sort(nums);
        int temp = 0;
        int i;
        for (i = 0; i < nums.length; i++) {
            if (nums[i] == i){}
            else {
                temp = i;
                break;
            }
        }
        return temp = i == nums.length ? i : temp;
    }
}

27. 排列硬币

package com.lxh.simple;
/* 已通过 2021.10.12 时间1ms 击败100% 内存35.8M 击败7.65%
* 本题自我感觉重点在于 对基本数据类型取值范围的掌握
* 
* 也可用折半查找解决
* */

public class ArrangingCoins0441 {
    public int arrangeCoins(int n) {
        long m = n;
        int temp = (int)Math.sqrt(2 * m);
        temp = (long)temp * (temp+1) / 2 <= n ? temp : temp - 1;
        return temp;
    }

    public static void main(String[] args) {
        ArrangingCoins0441 ac0441 = new ArrangingCoins0441();
        System.out.println(ac0441.arrangeCoins(1804289383));
    }
}

28. 3的幂

package com.lxh.simple;
/* 已通过 2021.10.13 时间8ms 击败100% 内存38.4MB 击败5.38%
* 递归调用
*
* */

public class PowerThree0326 {
    public boolean isPowerOfThree(int n) {
        if (n < 1)
            return false;
        if (n == 1)
            return true;
        return Recursion(n);
    }

    int flag = 1;
    private boolean Recursion(int n) {
        if (n == 1) {
            flag = 1;
        } else if(n % 3 == 0){
            flag = 1;
            n = n / 3;
            Recursion(n);
        } else
            flag = 0;
        return flag == 1;
    }

    public static void main(String[] args) {
        PowerThree0326 pt0231 = new PowerThree0326();
        System.out.println(pt0231.isPowerOfThree(45));
    }
}

29. 4的幂

package com.lxh.simple;
/* 已通过 2021.10.13 时间1ms 击败100% 内存35.5MB 击败31.77%
*
*
* */

public class PowerFour0342 {
    public boolean isPowerOfFour(int n) {
        while(n != 0 && n % 4 == 0) {
            n /= 4;
        }
        if(n == 1)
            return true;
        return false;
    }
}

30. 合并两个有序数组

package com.lxh.simple;
/* 已通过
*
*
* */

import java.util.Arrays;

public class MergeSortedArray0088 {
    public void merge(int[] nums1, int m, int[] nums2, int n) {

/*        if (n == 0) {
            System.out.println(Arrays.toString(nums1));
        }*/
/*        if (m == 0) {
            nums1 = nums2;
            System.out.println(Arrays.toString(nums1));
        }*/
/*
        StringBuilder result = new StringBuilder();

        for (int i = 0, j = 0; i < m;) {
            if (nums1[i] <= nums2[j]) {
                result.append(nums1[i]);
                i++;
            }
            else {
                result.append(nums2[j]);
                j++;
            }
            int temp = i;
            while (i == m - n && j < n) {
                result.append(nums2[j]);
                j++;
                temp++;
            }
            while (j == n && temp + 1 < m) {
                result.append(nums1[i]);
                i++;
            }
        }
        for (int k = 0; k < result.length(); k++) {
            nums1[k] = result.charAt(k);
        }
        System.out.println(Arrays.toString(nums1));*/

        for (int i = m, j=0; i < m+n; i++) {
            nums1[i] = nums2[j++];
        }
        Arrays.sort(nums1);
        System.out.println(Arrays.toString(nums1));
    }

    public static void main(String[] args) {
        MergeSortedArray0088 msa0088 = new MergeSortedArray0088();
        int[] nums1 = {0,0,0};
        int[] nums2 = {1,2,3};
        int m = 0;
        int n = 3;
        msa0088.merge(nums1, m, nums2, n);
    }
}

31. 反转字符串

package com.lxh.simple;
/* 已通过 2021.10.13 时间0ms 击败100% 内存45.1M 击败37.65%
* 一个简单的转换
*
*
* */
public class ReverseString0344 {
    public void reverseString(char[] s) {
        int i = 0;
        int j = s.length - 1;
        while(i <= j) {
            char temp = s[i];
            s[i] = s[j];
            s[j] = temp;
            i++;
            j--;
        }
        for (char c : s)
            System.out.print(c + " ");
    }

    public static void main(String[] args) {
        ReverseString0344 rs0344 = new ReverseString0344();
        char[] s = {'h','e','l','l','o','o'};
        rs0344.reverseString(s);
    }
}

32. 两个数组的交集

package com.lxh.simple;
/* 已通过 2021.10.13 时间2ms 击败91.11% 内存38.6MB 击败55.41%
* 本题 自己用了HashSet()方法 HashSet方法中关键字唯一 不会出现重复的
* 同时掌握由HashSet()转换为数组的过程 从而能应对各种情况。
*
* Ps: Arrays.copyOfRange(int[ ] original,int from,int to)
* 将一个原始的数组original,从下标from开始复制,复制到上标to,生成一个新的数组。
* 注意这里包括下标from,不包括上标to.
* 效率和clone基本一致,都是native method,比利用循环复制数组效率要高得多。
*

注意这里包括下标from,不包括上标to。
* */
import java.util.*;

public class IntersectionTwoArrays0349 {
    public int[] intersection(int[] nums1, int[] nums2) {
        Arrays.sort(nums1);
        Arrays.sort(nums2);
        Set<Integer> result = new HashSet<>();

        int i = 0;
        int j = 0;
        int length = nums1.length <= nums2.length ? nums1.length : nums2.length;
        while(i < nums1.length && j < nums2.length) {
            if (nums1[i] == nums2[j]) {
                result.add(nums1[i]);
                i++;
                j++;
            } else if (nums1[i] < nums2[j])
                i++;
            else
                j++;
        }
        Object[] obj = result.toArray();
        int[] temp = new int[obj.length];
        for (int k = 0; k < obj.length; k++) {
            temp[k] = (int) obj[k];
        }
        return temp;
    }

    public static void main(String[] args) {
        IntersectionTwoArrays0349 ita0349 = new IntersectionTwoArrays0349();
        int[] nums1 = {4,4,9};
        int[] nums2 = {9,4,9,8,4};
        int[] nums3 = ita0349.intersection(nums1, nums2);
        System.out.println(Arrays.toString(nums3));
    }
}

/*
Arrays.copyOfRange();

public class Test {
    public static void main(String[] args) {
        int[] array = {0, 1, 2, 3, 4, 5, 6};
        int[] array2 = Arrays.copyOfRange(array, 2, 4);
        System.out.println(Arrays.toString(array2));
    }
}*/

33. 字符串中的第一个唯一字符

package com.lxh.simple;
/* 已通过 2021.10.13 时间 36ms 击败了9.39% 内存39MB 击败47.80%
* 想的太复杂了 在想到一种方法时 要想一想有没有更简便的方法
* HashMap散列表 不按进入顺序存储的 LinkedHashMap按照进入顺序
*
* 附 大神代码
* 注意总结 indexof()和lastIndexof()方法
* */
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;

public class FirstUniqueCharacterString0387 {
    public int firstUniqChar(String s) {
        /*HashMap散列图、Hashtable散列表是按“有利于随机查找的散列(hash)的顺序”。
        并非按输入顺序。遍历时只能全部输出,而没有顺序。
        Map<Character, Integer> unique = new HashMap<>();*/
        //LinkedHashMap<>();按照输入顺序进入和输出
        Map<Character, Integer> unique = new LinkedHashMap<>();

        for (int i = 0; i < s.length(); i++) {
            if (unique.containsKey(s.charAt(i))) {
                unique.put(s.charAt(i), unique.get(s.charAt(i)) + 1);
            } else
                unique.put(s.charAt(i), 1);
        }

        Character temp = null;
        int flag = 1;
        for (Character key : unique.keySet()) {
            if (unique.get(key) == 1) {
                temp = key;
                flag = 0;
                break;
            }
        }
        if (flag == 1) {
            return -1;
        }

        int i = 0;
        for (i = 0; i < s.length(); i++) {
            if (temp == s.charAt(i)) {
                break;
            }
        }

        return i;
    }

    public static void main(String[] args) {
        FirstUniqueCharacterString0387 fucs0387 = new FirstUniqueCharacterString0387();
        String s1 = "leetcode";
        String s2 = "loveleetcode";
        String s3 = "aabb";

        System.out.println(fucs0387.firstUniqChar(s3));
    }
}

/* 执行用时为1ms的范例
class Solution {
    public int firstUniqChar(String s) {
        int minIndex = s.length();
        for(char i='a';i<='z';i++){
            //indexOf返回所查找字符串位置,找不到返回-1。
            int index = s.indexOf(i);
            if(index == -1) continue;

            if(index == s.lastIndexOf(i)) minIndex = Math.min(minIndex, index);
        }
        return minIndex != s.length()?minIndex:-1;
    }
}*/

34. 找不同
|=:两个二进制对应位都为0时,结果等于0,否则结果等于1;

&=:两个二进制的对应位都为1时,结果为1,否则结果等于0;

^=:两个二进制的对应位相同,结果为0,否则结果为1。

package com.lxh.simple;
/* 以通过 2021.12.13 时间15ms 击败6.11% 内存 37.1M 击败9.54%
* 这道题还是想复杂了 12.14号 思考一下更简便的方法
*
* 附 大神代码 和 很巧妙的思想代码
* 字符可以直接相加 直接相加时以ascii码相加
* */
import java.util.HashMap;
import java.util.Map;

public class FindDifference0389 {
    public char findTheDifference(String s, String t) {
        Map<Character, Integer> addLetter = new HashMap<>();
        String sumString = s + t;
        for (int i = 0; i < sumString.length(); i++) {
            if (addLetter.containsKey(sumString.charAt(i)))
                addLetter.put(sumString.charAt(i), addLetter.get(s.charAt(i)) + 1);
            else
                addLetter.put(sumString.charAt(i), 1);
        }

        Character temp = null;
        for (Character key : addLetter.keySet()) {
            if (addLetter.get(key) == 1)
                temp = key;
            break;
        }
        return temp;
    }

    public static void main(String[] args) {

    }
}

/* 大神代码
class Solution {
    public char findTheDifference(String s, String t) {
        char[] cs = s.toCharArray(), ct = t.toCharArray();
        int n = cs.length, a = ct[n];
        for (int i = 0; i < n; i++) {
            a ^= cs[i] ^ ct[i];
        }
        return (char) a;
    }
}*/

/* 思想很巧妙 字符可以直接加到int型里面的 因为多出来一个字符 每个字符串加在一起后 
   那差值就是多出来的那个字符的ASCII码
class Solution {
    public char findTheDifference(String s, String t) {
        int ss = 0;
        int ts = 0;
        for (char c : s.toCharArray()){
            ss += c;
        }

        for (char c : t.toCharArray()){
            ts += c;
        }

        return (char) (ts - ss);
    }
}*/

35. 最长和谐子序列

package com.lxh.simple;
/* 已通过 2021.10.17 时间16ms 击败72.76% 内存39.1M 击败86.20%
* 有多种做法 但自己不断尝试的过程中 会遇到新的问题 在遇到问题的时候要认真思考
* 看有没有更优的做法。
*
* */
import java.util.HashMap;
import java.util.Map;

public class LongestHarmoniousSubsequence0594 {
    public int findLHS(int[] nums) {

        int count = 0;
/*        //用作负数的时候出现了问题 可以将正负分开来调用 是负数时 加绝对值再调用
          //但这样感觉还是复杂了 故最终采用HashMap();
        int max = Integer.MIN_VALUE;
        for (int i = 0; i < nums.length; i++) {
            if (Math.abs(nums[i]) > max)
                max = Math.abs(nums[i]);
        }
        int[] sum = new int[max + 1];
        for (int i = 0; i < nums.length; i++) {
            sum[Math.abs(nums[i])]++;
        }
        int count = 0;
        for (int i = 0; i < sum.length - 1; i++) {
            if (sum[i] != 0 && sum[i + 1] != 0)
                count = sum[i + 1] + sum[i] > count ? sum[i + 1] + sum[i] : count;
        }

        return count;
    }

    private int Computer*/
        Map<Integer, Integer> result = new HashMap<>();
        for (int i = 0; i < nums.length; i++) {
            if (result.containsKey(nums[i])) {
                result.put(nums[i], result.get(nums[i]) + 1);
            } else {
                result.put(nums[i], 1);
            }
        }

        for (int x : result.keySet()) {
            if (result.containsKey(x + 1)) {
                count = result.get(x) + result.get(x + 1) > count ? result.get(x) + result.get(x + 1) : count;
            } else {
            }
        }
        return count;
    }


/*        //int max = nums[0];
        int min = nums[0];
        int i = 0, k = 0;
        //int j = 1;
        int middle = 0;
        int count = 0;
        boolean[] flag = new boolean[nums.length];

        for (i = 0; i < nums.length; i++) {
            if (!flag[i]) {
                for (int j = 0; j < nums.length;j++) {

                }
            }
            for (int j = 0; j < nums.length;j++) {
            if (nums[j] < min) {
                    min = nums[j];
                }
                if (max - min  <= 1) {
                    middle++;
                } else {
                    flag[k++] = j;
                }
            }
            count = middle > count ? middle : count;
            k = 0;
        }*/
       /* while(i < nums.length && j < nums.length) {
            if (nums[j] >= max) {
                max = nums[j];
            } else if (nums[j] <= min) {
                min = nums[j];
            }
            if (max - min  <= 1) {
                max = nums[j];
                count++;
                j++;
            } else {
                flag[];
            }
        }
    }*/

    public static void main(String[] args) {
        LongestHarmoniousSubsequence0594 lhs0594 = new LongestHarmoniousSubsequence0594();
        int[] nums = {-3,-2,1,2,3};
        System.out.println(lhs0594.findLHS(nums));
    }
}

36. 提莫攻击

package com.lxh.simple;
/* 已通过 2021.10.17 时间2ms 击败了91.67% 内存39.8MB 击败了95.56%
*  写此类简单的代码时 更细心认真一点 思考好整体结构后再动笔 争取一次性就正确完成
*
* */

public class TeemoAttacking0495 {
    public int findPoisonedDuration(int[] timeSeries, int duration) {
        int count = 0;
        int i;
        for (i = 0; i < timeSeries.length - 1; i++) {
            count += timeSeries[i] + duration > timeSeries[i+1] ? timeSeries[i+1] - timeSeries[i] : duration;
        }
        count += duration;

        return count;
    }

}

37. 下一个更大元素I

package com.lxh.simple;
/* 已通过 2021.10.17 时间2ms 击败98.97% 内存38.6MB 击败60.33%
*
*
*
* */
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

public class NextGreaterElementI0496 {
    public int[] nextGreaterElement(int[] nums1, int[] nums2) {

        Map<Integer, Integer> result = new HashMap<>();
        for (int i = 0 ; i < nums2.length; i++) {
            result.put(nums2[i], i);
        }
        int j;
        for (int i= 0; i < nums1.length; i++) {
            for (j = result.get(nums1[i]) + 1 ; j < nums2.length; j++) {
                if (nums2[j] > nums1[i]) {
                    nums1[i] = nums2[j];
                    break;
                }
            }
            if (j == nums2.length) {
                nums1[i] = -1;
            }
        }
        return nums1;
    }

    public static void main(String[] args) {
        NextGreaterElementI0496 ngeI0496 = new NextGreaterElementI0496();
        int[] nums1 = {4,1,2};
        int[] nums2 = {1,3,4,2};
        int[] nums3 = ngeI0496.nextGreaterElement(nums1, nums2);
        System.out.println(Arrays.toString(nums3));
    }
}

38. 种花问题

package com.lxh.simple;
/* 已通过 2021.10.17 时间1ms 击败91.36% 内存39.6MB 击败85.89%
*
*
*
* */
public class CanPlaceFlowers0605 {
    public boolean canPlaceFlowers(int[] flowerbed, int n) {
        int count = 0;
        if (flowerbed.length == 1) {
            if (flowerbed[0] == 0)
                count += 1;
            if (count >= n)
                return true;
            else
                return false;
        }
        if (flowerbed[0] == 0 && flowerbed[1] == 0) {
            count += 1;
        }
        flowerbed[0] = 1;
        for (int i = 0; i < flowerbed.length -1; i += 2) {
            if (flowerbed[i] != 0) {}
            else if (flowerbed[i-1] != 1 && flowerbed[i+1] != 1){
                count++;
                flowerbed[i] = 1;
            }
        }
        if (flowerbed[flowerbed.length-1] == 0 && flowerbed[flowerbed.length-2] == 0) {
            count += 1;
        }
        if (count >= n)
            return true;
        else
            return false;
    }
}

39. 字符串中的单词数

package com.lxh.simple;
/* 已通过 2021.10.18 时间0ms 击败100% 内存36MB 击败86.37%
*
*
*
* */
public class NumberSegmentsString0434 {
    public int countSegments(String s) {
        int count = 0;
        if (s.length() == 0)
            return count;
        if (s.charAt(0) == ' ')
            count = 0;
        else
            count = 1;
        for (int i = 0; i < s.length()-1; i++) {
            if (s.charAt(i) == ' ' && s.charAt(i+1) != ' ') {
                count++;
            }
        }
        return count;
    }
}

40. 两数相除

package com.lxh.medium;
/* 2020.10.19 已通过 此题需要好好总结!
*
*
*
* */
public class DivideTwoIntegers0029 {
    public int divide(int dividend, int divisor) {
        if (dividend == 0x80000000 && divisor == -1)
            return Integer.MAX_VALUE;

        int flag = 0;

        if (dividend > 0) {
            dividend = -dividend;
            flag++;
        }
        if (divisor > 0) {
            divisor = -divisor;
            flag++;
        }

        int result = minusCircle(dividend, divisor);
        return flag == 1 ? -result : result;
    }

/* 可以成功 但超时
    private int minusCircle(int dividend, int divisor) {
        if (dividend == divisor)
            return 1;
        int count = -1;
        while (dividend <= 0) {
            count++;
            dividend = dividend - divisor;
        }
        return count;
    }*/

    private int minusCircle(int dividend, int divisor) {
        int result = 0;
        while (dividend <= divisor) {
            int value = divisor;
            int quotient = 1;
            while (value >= 0xc0000000 && dividend <= value + value) {
                quotient += quotient;
                value += value;
            }

            result += quotient;
            dividend -= value;
        }
        return result;
    }

    public static void main(String[] args) {
        DivideTwoIntegers0029 dti0029 = new DivideTwoIntegers0029();
        System.out.println(dti0029.divide(
                -2147483648,
                -2147483648));
    }
}

41. 有效的字母异位词

package com.lxh.simple;
/* 已通过 2021.10.20 好好总结
*  1. 字符串可以直接转换成字符数组;
*  2. 字符数组同样可以用sort函数进行排序
*  3. Arrays.equals() 可以直接比较字符串
*
*  4. 使用HashMap()进行解题。再优化HashMap再做一遍。
*  5. 将字符转换成数组再做一遍。
*
* */
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

public class ValidAnagram0242 {
    public boolean isAnagram(String s, String t) {
        /*if (s.length() != t.length())
            return false;

        Map<Character, Integer> sumLetterS = new HashMap<>();
        Map<Character, Integer> sumLetterT = new HashMap<>();

        for (int i = 0; i < s.length(); i++) {
            //
            sumLetterS.put(s.charAt(i), sumLetterS.getOrDefault(s.charAt(i), 0) + 1);
        }

        for (int i = 0; i < t.length(); i++) {
            sumLetterT.put(t.charAt(i), sumLetterT.getOrDefault(t.charAt(i), 0) + 1);
        }

        for (char x : sumLetterS.keySet()) {
            if (!sumLetterT.containsKey(x) || sumLetterS.get(x) != sumLetterT.get(x)) {
                return false;
            }
        }
        return true;
    }*/
        char[] sChars = s.toCharArray();
        char[] tChars = t.toCharArray();
        Arrays.sort(sChars);
        Arrays.sort(tChars);
        return Arrays.equals(sChars, tChars);

        // 一行解决战斗
        //return Arrays.equals(s.chars().sorted().toArray(), t.chars().sorted().toArray());
    }

}

42. 完美数

package com.lxh.simple;
/* 已通过 2021.10.20 时间401ms 击败40.80% 内存35.1MB 击败68.12%
*
*
* */

public class PerfectNumber0507 {
    public boolean checkPerfectNumber(int num) {

        if (num == 1)
            return false;
        int count = 1;
        int divisor = num;
        for (int i = 2; i < divisor; i++) {
            if (num % i == 0) {
                divisor = num / i;
                count += i + divisor;
            }
        }
        return count == num;
    }

    public static void main(String[] args) {
        PerfectNumber0507 pn0507 = new PerfectNumber0507();
        System.out.println(pn0507.checkPerfectNumber(28));
    }
}

43. 斐波那契数

package com.lxh.simple;
/* 已通过 2021.10.20 时间8ms 击败21.41% 内存35.1MB 击败59.26%
*
*
* */

public class FibonacciNumber0509 {
    public int fib(int n) {
        if (n == 0)
            return 0;
        if (n == 1)
            return 1;
        return fib(n-1) + fib(n-2);
    }

    public static void main(String[] args) {
        FibonacciNumber0509 fn0509 = new FibonacciNumber0509();
        System.out.println(fn0509.fib(4));
    }
}

44. 二分查找

package com.lxh.simple;
/* 已通过 时间0ms 击败100% 内存39.5MB 击败22.82%
*
* */

public class BinarySearch0704 {
    public int search(int[] nums, int target) {
        int left = 0;
        int right = nums.length - 1;
        int middle;
        while(left <= right) {
            middle = (left+right) / 2;
            if (target == nums[middle])
                return middle;
            else if (target > nums[middle])
                left = middle + 1;
            else
                right = middle - 1;
        }
        return -1;
    }
}

45. 检查大写字母

package com.lxh.simple;
/* 已通过 2021.10.21 时间1ms 击败99.81% 内存36.9MB 击败26.47%
*
* */

public class DetectCapital0520 {
    public boolean detectCapitalUse(String word) {
        char[] chars = word.toCharArray();
        int count = 0;
        for (int i = 1; i < chars.length; i++) {
            if (chars[i] - 'a' >= 0) {
                count++;
            }
        }
        if (count == chars.length - 1) {
            return true;
        } else if (count == 0 && chars[0] - 'a' < 0) {
            return true;
        }else
            return false;
    }
}

46. 三个数的最大乘积

package com.lxh.simple;
/* 已通过 2021.10.21 时间12ms 击败13.50% 内存40MB 击败26.15%
*
*
* */
import java.util.Arrays;

public class MaximumProductThreeNumbers0628 {
    public int maximumProduct(int[] nums) {
        Arrays.sort(nums);
        int count = 0;
        int length = nums.length;
        int sumRight = nums[length-1]*nums[length-2]*nums[length-3];
        int sumLeft = nums[0] * nums[1] * nums[length-1];
        for (int i = 0; i < nums.length; i++) {
            if (nums[i] < 0)
                count++;
            else
                break;
        }
        if (count <= 1) {
            return sumRight;
        }else
            //可以直接写成 return Math.max(sumRight, sumLeft);
            return sumRight >= sumLeft ? sumRight : sumLeft;
    }
}

47. 学生出勤记录I

package com.lxh.simple;
/* 已通过 2021.10.21 时间1ms 击败18.84% 内存36.2MB 击败91.42%
* Str.trim()用于删除字符串头尾空白符
* String[] strs = s.split(" ");将字符串strs按照空格分成字符串数组
* */
public class StudentAttendanceRecordI0551 {
    public boolean checkRecord(String s) {

        int count = 0;
        for (int i = 0; i < s.length(); i++) {
            if (s.charAt(i) == 'A')
                count++;
            else if (s.charAt(i) == 'L' && i+2 < s.length()) {
                String s1 = s.substring(i, i+3);
                if (s1.compareTo("LLL") == 0)
                    return false;
            }
        }
        if (count > 1)
            return false;
        return true;
    }

    public static void main(String[] args) {
        StudentAttendanceRecordI0551 sari0551 = new StudentAttendanceRecordI0551();
        System.out.println(sari0551.checkRecord("PPALLP"));
    }
}

48. 反转字符串中的单词III
总结StringBuilder和StringBuffer:
详细介绍String,StringBuilder和StringBuffer
在这里插入图片描述

package com.lxh.simple;
/* 已通过 2021.10.21 时间10ms 击败19.89% 内存39MB 击败54.20%
* 1.通过此题将StringBuilder和StringBuffer总结好
* 2.result.setLength(0);将result长度置为0,也就是将其置空。
*
* */
public class ReverseWordsStringIII0557 {
    public String reverseWords(String s) {

        StringBuffer result = new StringBuffer();
        StringBuffer getResult = new StringBuffer();

        for (char ch : s.toCharArray()) {
            if (ch != ' ') {
                result.append(ch);
            }else{
                getResult.append(result.reverse());
                getResult.append(' ');
                /*将result重置为空 还有一种
                int length = result.length();// 取得字符串的长度
                result.delete(0,length);    //删除字符串从0~sb_length-1处的内容 (这个方法就是用来清除StringBuffer中的内容的)*/
                result.setLength(0);
            }
        }

        getResult.append(result.reverse());

        return getResult.toString();
    }

    public static void main(String[] args) {
        ReverseWordsStringIII0557 rwsiii0557 = new ReverseWordsStringIII0557();
        System.out.println(rwsiii0557.reverseWords(" Let's take LeetCode contest"));
    }
}

49. 最长连续递增序列

package com.lxh.simple;
/* 已通过 2021.10.22 时间1ms 击败100% 内存39.2MB 击败42.27%
*
*
* */
public class LongestSubsequence0674 {
    public int findLengthOfLCIS(int[] nums) {
        int i= 0;
        int count = 1;
        int result = 1;
        while (i < nums.length - 1) {
            if (nums[i] < nums[i+1]) {
                count++;
            }else {
                count = 1;
            }
            i++;
            result = Math.max(result, count);
        }
        return result;
    }

    public static void main(String[] args) {
        LongestSubsequence0674 ls0674 = new LongestSubsequence0674();
        int[] nums = {1,3,5,4,7};
        System.out.println(ls0674.findLengthOfLCIS(nums));
    }
}

50. 子数组最大平均数I

package com.lxh.simple;
/* 已通过 2021.10.22 时间5ms 击败33.94% 内存52.1MB 击败61.65%
* 注意 Integer.MAX_VALUE和Integer.MIN_VALUE的使用
*
* */
public class MaximumAverageSubarrayI0643 {
    public double findMaxAverage(int[] nums, int k) {

        int i = 0;
        int j = 0;
        double count = 0;
        //当代码中出现需要大小比较之类的 要把被替换的换成最小和最大值去进行后续运算。
        double result = Integer.MIN_VALUE;
        while (i < nums.length) {
            if ((i - j) < k) {
                count += nums[i];
                i++;
            } else {
                result = Math.max(result, count / k);
                count -= nums[j];
                j++;
            }
        }

        result = Math.max(result, count / k);
        return result;
    }

    public static void main(String[] args) {
        MaximumAverageSubarrayI0643 masi0643 = new MaximumAverageSubarrayI0643();
        int[] nums = {-1};
        System.out.println(masi0643.findMaxAverage(nums, 1));
    }
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值