java经典算法-day20

举报
喵手 发表于 2024/09/30 22:54:11 2024/09/30
【摘要】 哈喽,各位小伙伴们好,我是喵手。一、前言正值金三银四好时节,又到了刷题月。xdm,有空的欢迎一起呀。无论你是挤公交还是坐地铁时间,随时随地皆可刷...你可以不用实操,你只需要看题思考,完后有空coding就好呀。接下来我要开启我的刷题之旅啦,喜欢的小伙伴欢迎点赞关注哦。二、题目描述:题目1:给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出和为目标值target的...


哈喽,各位小伙伴们好,我是喵手。

一、前言

正值金三银四好时节,又到了刷题月。xdm,有空的欢迎一起呀。无论你是挤公交还是坐地铁时间,随时随地皆可刷...你可以不用实操,你只需要看题思考,完后有空coding就好呀。接下来我要开启我的刷题之旅啦,喜欢的小伙伴欢迎点赞关注哦。

二、题目描述:

题目1:

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标。

题目2:

给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

三、思路分析:

题1分析:

       这题其实就很好理解了,无非就是在一堆数组中,找出那两个想家等于目标值的数,且记录当前数组下标。思路就有很多了,最容易想到的方法是枚举数组中的每一个数 x,寻找数组中是否存在 target - x。 当我们使用遍历整个数组的方式寻找 target - x 时,需要注意到每一个位于 x 之前的元素都已经和 x 匹配过,因此不需要再进行匹配。而每一个元素不能被使用两次,所以我们只需要在 x 后面的元素中寻找 target - x。

题2分析:

       得知什么是回文数,那我们将数字本身反转,然后将反转后的数字与原始数字进行比较,如果它们是相同的,那么这个数字就是回文。但是,如果反转后的数字大于int.MAX,我们将遇到整数溢出问题。为了避免数字反转可能导致的溢出问题,为那我们为什么不考虑只反转int 数字的一半?毕竟,如果该数字是回文,其后半部分反转后应该与原始数字的前半部分相同。对不对,所以我们 只需要考虑对折数字,将两半进行 整体比较即可。

算法:

       由于数字为负数,一定不可能是回文数,所以我们直接pass掉,统一返回false。然后除了 0 以外,所有个位是 0 的数字不可能是回文,因为最高位不等于 0。所以我们可以对所有大于 0 且个位是 0 的数字也返回 false

       现在,让我们来考虑如何反转后半部分的数字。先将 数字转为字符串 ,然后将字符串分割为数组,只需要循环数组的一半长度进行判断对应元素是否相等即可。

四、算法实现:

题1AC代码:

public static int[] findNum(int[] nums,int target) {

    //记录数组长度。
    int n = nums.length;
    for (int i = 0; i < n; ++i) {
       for (int j = i + 1; j < n; ++j) {
            //直接进行两数相加
            if (nums[i] + nums[j] == target) { 
               return new int[]{i, j};
            }
        }
    }
    return new int[0];
}

题2AC代码:

public static boolean isPalindrome(int num) {

    //数字为负数
    if (num < 0) {
        return false;
    }

    //个位数是0
    int g = num % 10;
    if (g == 0 && num != 0) {
        return false;
    }

    //转成字符串
    String strNum = String.valueOf(num);
    for (int i = 0; i < strNum.length() / 2; i++) {
        if (strNum.charAt(i) != strNum.charAt(strNum.length() - 1 - i)) {
            return false;
        }
    }
    return true;
}

五、总结:

综上所述,这两道第二道其实我在上几期就已经介绍过了,不知道大家是否记得,然后第一道题就很简单,思路也很多,可以转化为寻数字这样,然后去遍历一个数组找到是否存在这么一个数字即可。

如果你有更好的解题思路或者想法,欢迎评论区留言告诉我哦,喵手感激不尽。

六、文末:

好啦,以上就是我这期的全部内容,如果有任何疑问,欢迎下方留言哦,咱们下期见。

... ...
学习不分先后,知识不分多少;事无巨细,当以虚心求教;三人行,必有我师焉!!!

wished for you successed !!!

---------------------------------------------------------------------

⭐️若喜欢我,就请关注我叭。

⭐️若对您有用,就请点赞叭。

⭐️若有疑问,就请评论留言告诉我叭。

---------------------------------------------------------------------

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。