【LeetCode系列】:编程能力提升(4)

如果你不相信努力和时光,那么成果就会是第一个选择辜负你的。不要去否定你自己的过去,也不要用你的过去牵扯你现在的努力和对未来的展望。不是因为拥有希望你才去努力,而是去努力了,你才有可能看到希望的光芒。【LeetCode系列】:编程能力提升(4),希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

🍀循环

题目链接:
T1:1822. 数组元素积的符号
T2:1502. 判断能否形成等差数列
T3:202. 快乐数
T4:1790. 仅执行一次字符串交换能否使两个字符串相等

T1:数组元素积的符号

📚题目详情

在这里插入图片描述

💡解题思路一

将数组所有数相乘然后判断正负。
注意:需要考虑mul的范围,由题可知最大数据范围是100的1000次方,所以需要将数据类型定义为double。

🔑源代码一

class Solution {
    public int arraySign(int[] nums) {
        double mul=1;
        for(int i=0;i<nums.length;i++){
            mul *= nums[i];
        }
        if(mul>0){
            return 1;
        }else if(mul<0){
            return -1;
        }
        return 0;
    }
}

💡解题思路二(推荐)

遍历数组有以下场景

  • 遇到0,直接返回
  • 小于0,结果乘之

🔑源代码二

class Solution {
    public int arraySign(int[] nums) {
        int sign = 1;
        for (int n : nums) {
            if (n == 0) {
                return 0;
            }
            if (n < 0) {
                sign *= -1;
            }
        }
        return sign;
    }
}

T2:判断能否形成等差数列

📚题目详情

在这里插入图片描述

💡解题思路一

按照等差数列的定义去求解,等差数列至少要有三项,望知晓。
在这里插入图片描述
用前一项减后一项去求差d,然后逐个比较是否所有前一项减后一项的差相等。

🔑源代码一

class Solution {
    public boolean canMakeArithmeticProgression(int[] arr) {
        int sum = 0;
        Arrays.sort(arr);
        for (int i = arr.length - 1; i >= 2; i--) {
             if (arr[i] - arr[i - 1] == arr[i - 1] - arr[i - 2]) {
                 sum++;
            }
        }
        if (sum == arr.length - 2) {
                return true;
            } 
        return false;
    }
}

💡解题思路二(推荐)

在这里插入图片描述

🔑源代码二

class Solution {
    public boolean canMakeArithmeticProgression(int[] arr) {
        Arrays.sort(arr);
        for (int i = 1; i < arr.length - 1; ++i) {
            if (arr[i] * 2 != arr[i - 1] + arr[i + 1]) {
                return false;
            }
        }
        return true;
    }
}

T3: 快乐数(好题)

📚题目详情

在这里插入图片描述

💡解题思路

详情请见:LeetCode题解
在这里插入图片描述

🔑源代码

class Solution {
    private int getNext(int n) {
        int totalSum = 0;
        while (n > 0) {
            int d = n % 10;
            n = n / 10;
            totalSum += d * d;
        }
        return totalSum;
    }

    public boolean isHappy(int n) {
        Set<Integer> seen = new HashSet<>();
        while (n != 1 && !seen.contains(n)) {
            seen.add(n);
            n = getNext(n);
        }
        return n == 1;
    }
}

T4:仅执行一次字符串交换能否使两个字符串相等(好题)

📚题目详情

在这里插入图片描述

💡解题思路

在这里插入图片描述

🔑源代码

class Solution {
    public boolean areAlmostEqual(String s1, String s2) {
        int cnt = 0;
        int len = s1.length();
        int[] map = new int[26];
        char[] chas1 = s1.toCharArray();
        char[] chas2 = s2.toCharArray();
        for (char ch : chas1) {
            map[ch - 'a']++;
        }

        for (char ch : chas2) {
            if (map[ch - 'a']-- == 0) {//先判断,再--,防止影响后面的判断如“yj”,"yy"如果不--就会影响结果
                return false;
            }
        }

        for (int i = 0; i < len; ++i) {
            if (chas1[i] != chas2[i]) {
                cnt++;
            }
        }

        return cnt <= 2;
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/199753.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!