目录

1.给定target,找出数组里和为target的数组下标

2.回文数

方法一:暴力法

方法二:


1.给定target,找出数组里和为target的数组下标

题目描述:

 平台提交代码:

测试结果:

思路:

用HashMap表
num数组里面的元素当作Key,方便到时候查找HasjMap里面是否含有这个Key(元素)。
下标当作Value,到时候可以用对应的元素(Key)去查找到下标(Value)
定义一个数组用来存放那两个和为target的元素的下标值
1.从num[0]开始
2.存储:把num[0]存入HashMap,Key是元素,Value是下标

3.查找:计算target-num[1]的值,看看这个值在HashMap里是否存在,用containskey方法  4.存储:存储num[1]
5.如果有,那么把num[1]以及target-num[1]对应的数组元素对应的下标存入自己定义的容量为2的数组,
可以用get方法,通过对应的Key去得到对应的Value(下标)

6.查找:计算targer-num[2]的值,用containskey方法去查找是否存在这个值,
7.存储:如果不包含,那么就继续保存下一个(num[2])到HashMap
8如果有,那么把num[1]以及target-num[1]对应的数组元素对应的下标存入自己定义的容量为2的数组,
可以用get方法,通过对应的Key去得到对应的Value(下标)

9.如果不包含,那么就继续保存下一个(num[2])到HashMap
总之,num[0]只用存储,数组里的数除了num[0]以外的数,进行存储后就计算target-这个数的操作,去在哈希表里面进行查找、
是否存在target-这个数
没有的话就一直进行存储和查找,直到查找到可以和自己加起来的值为target为止

具体代码: 

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;public class solution {public int[] twoSum(int[]nums, int target){int []ret=new int[2];//用来存放下标的数组int len=nums.length;Map<Integer,Integer> hashmap=new HashMap<>();//用来存放整数数组里面的元素及其下标,元素为Key,下标为Valuehashmap.put(nums[0],0);//先把num[0]存进哈希表for(int i=1;i<len;i++){//从下标为1的数组元素开始进行存储再查找的操作//一.查找//1.算出target-num[i]的值int differ=target-nums[i];//2.查找哈希表中是否存在这个值,我们把数组里的元素当作了key可用contanisKey的方法查找if(hashmap.containsKey(differ)){ret[0]=hashmap.get(differ);//用key值获取下标ret[1]=i;}//二.存储hashmap.put(nums[i],i);}return ret;}public static void main(String[] args) {Scanner sc=new Scanner(System.in);//输入数组String str=sc.nextLine().toString();//输入数组的内容,可以读取一整行,包括空格str=str.replaceFirst("\\[","");str=str.replaceFirst("\\]","");String arr[]=str.split(",");//拆分字符串成字符串数组int []aw=new int [arr.length];//定义一个长度和arr数组相同的int型的数组for(int i=0;i<aw.length;i++){aw[i]=Integer.parseInt(arr[i]);//将arr的内容复制到aw中}//输入targetint target=sc.nextInt();//创建对象调用方法solution s1=new solution();System.out.println(s1.twoSum(aw,target));}}

注意:

  1. 在运行的时候,如果数组是[3,3]这类具有重复元素的数组,那么我们输出的下标应该是先出现的下标和后出现的下标进行输出,([0,1])而不是输出两个一模一样的下标 ([1,1]),所以在这里应该注意要先进行查找再进行存储。因为当数组里面有相同元素存在时,元素作为Key,那么在第二次进行存储的时候,后面的value会覆盖掉前面的value。
  2. String字符串可以调用replace方法删除字符

去掉 [ 这个符号时,记得加上转义字符\\

2.回文数

题目描述:

方法一:暴力法

呜呜呜呜,暴力法太难了,即麻烦,而且时间和空间复杂度都会很大


public class huiwen {public boolean isPalindrome(int x) {if(x<0)return false;boolean bool=true;String str=String.valueOf(x);//将int型的x转换成了String类型int length=str.length();char[] num1=new char[length];//创建一个char类型的数组用来存储字符串正序的各位数字char[] num2=new char[length];//创建一个数组用来存储字符串逆序的各位数字for(int i=0;i<length;i++){num1[i]=str.charAt(i);}//存储正序数字for(int i=length;i>0;i--){System.out.println(num2[length-i]=str.charAt(i-1));//从0到length-1}//存储逆序数字for(int i=0;i<length;i++){if(num1[i]!=num2[i]) {bool = false;break;}}//比较两个字符数组的元素是否一样,若出现了一个不一样,那么就令bool为FALSE,并跳出循环return bool;}public static void main(String[] args) {Scanner sc=new Scanner(System.in);int num=sc.nextInt();huiwen h=new huiwen();System.out.println(h.isPalindrome(num));}
}

思路: 

  1. 如果是负数那么必定不是回文数,返回false,如果是正数那么继续进行判断
  2. 首先把int数据转为String类型的数据
  3. 创建两个char类型的数组,char1和char2分别用来存储转换为String后的字符串的正序和逆序的字符         (用charAt()方法来获取String里面的单个字符)
  4. 然后用for循环来对两个char类型的数组进行比较,如果出现不同的,那么就令boolean bool的值为false,并跳出循环
  5. 返回定义的boolean类型数据

测试结果

方法二:

思路:

1.考虑特殊情况:

负数不可能是回文数,正数的个位数为0的数也不可能为回文数,一个数的开头不可能为0。所以负数以及个位数为0的正数在方法里面返回false

2.我们一般会采取将数字反转过来,再比较两个数是否相等,但是这里会存在数据溢出的风险,当一个数为2472748282919时没有溢出,但是反转过来时数据发生了溢出,这样不可行。我们可以观察到回文数都是对称的数字(奇数位数的数字关于中间的那个数字对称,偶数位数的数字关于中间的一条虚线对称),这时候,我们可以选择只取数字的前一半和后一半,然后把后一半数字反转过来与前一半数字进行比较。

3.在这里我们分两种情况对int x进行取半操作(reverted表示后半部分的数字反转过来)

在正在进行取半操作时,前半部分的数总大于后半部分的数,那什么时候停止呢?

运行到前半部分数等于(这种情况必是偶数位数)或者小于(可以是奇数位数的数字,也可以是偶数位数的数字)后半部分数反转过来的时候停止。

具体看下面分析

后半部分反转过来的数字一点点增大,一开始是小于前半部分的,直到后半部分反转过来的数等于或者大于前半部分,说明,没必要再进行取半这个操作了。

奇数位数的数字:把后半部分反转的数去掉末尾的数字与前半部分比较(因为后半部分的个位数存储了x这个数最中间的数字)

偶数位数的数字:直接后半部分反转过来的数与前半部分比较

具体代码 

class Solution {public boolean isPalindrome(int x) {if (x < 0 || (x % 10 == 0 && x > 0)) {return false;}int revertedNumber = 0;while (x > revertedNumber) {revertedNumber = revertedNumber * 10 + x % 10;x /= 10;}return x == revertedNumber || x == revertedNumber / 10;}
}

测试结果

力扣----算法(一)相关推荐

  1. 程序员面试需要刷力扣算法题吗

    这里写目录标题 1. 程序员面试需要刷力扣算法题吗 1.1. 算法题的一些特征 1.2. 为什么要考查算法 1.3. 目前面试主要考查 3 类 1. 程序员面试需要刷力扣算法题吗 1.1. 算法题的一 ...

  2. LeetCode 力扣算法题解汇总,All in One

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: https://fuxuemingzhu.cn 关键词:LeetCode,力扣,算法,题解,汇总,解析 把自己刷过的所有题目做一个整理, ...

  3. 力扣算法1~10题(js)

    标题 力扣算法 文章目录 标题 1.贩卖柠檬水,能否正确找零 错误 思路一: 解法一 缺点:耗时太长 解法二(大佬解法) 2.返回nums中和为target的两个数的下标 解法 3.两数相加 思路与算 ...

  4. 力扣算法 509. 斐波那契数 70. 爬楼梯 746. 使用最小花费爬楼梯

    学习内容 力扣算法 509. 斐波那契数 70. 爬楼梯 746. 使用最小花费爬楼梯 具体内容 509. 斐波那契数 斐波那契数,通常用 F(n) 表示,形成的序列称为 斐波那契数列 .该数列由 0 ...

  5. 我的力扣算法845-数组中的最长山脉

    哈哈,真的放了一天假. 好了,废话不多说,我们先开始今天的力扣每日一题: 虽然说这次的算法是中等难度,但是相信通过时间和不断的尝试,各位都可以完成出来,这里介绍一种取巧的方式进行问题的解决. 既然是找 ...

  6. LeetCode -- 力扣算法题解题心得 -- (个人笔记记录)持续更新~~

    一.前言 正式开启数据结构+算法研究的历程,准备好一年后的面试.下面的解法不一定是最优解,只求能力提升,会定期更新~~ 二.目录 1 2 19 20 21 24 35 42 83 86 94 96 1 ...

  7. 力扣算法题—042接雨水

    1 #include"000库函数.h" 2 //一点头绪都没有 3 //然后就自己按自己的意思来一遍 4 //好像没有用算法 5 //16ms,让我激动一把 6 7 class ...

  8. 力扣算法之两矩形求和

    原题目 223. 矩形面积 给你 二维 平面上两个 由直线构成的 矩形,请你计算并返回两个矩形覆盖的总面积. 每个矩形由其 左下 顶点和 右上 顶点坐标表示: 第一个矩形由其左下顶点 (ax1, ay ...

  9. 力扣算法题-19.秋叶收藏集 C语言实现

    题目 小扣出去秋游,途中收集了一些红叶和黄叶,他利用这些叶子初步整理了一份秋叶收藏集 leaves, 字符串 leaves 仅包含小写字符 r 和 y, 其中字符 r 表示一片红叶,字符 y 表示一片 ...

  10. 力扣算法——78_子集

    给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集). 说明:解集不能包含重复的子集. 示例: 输入: nums = [1,2,3] 输出: [[3],[1],[2],[1,2, ...

最新文章

  1. 高可用的Spring FTP上传下载工具类(已解决上传过程常见问题)
  2. CTO 写的代码,真是绝了
  3. (0002) iOS 开发之开发者iOS 10 正式版体验报告
  4. 有两个不同list,需要对比两个list内容且输出差异的内容
  5. ui设计看的书_5本关于UI设计的书
  6. 28岁学python转行_28岁转行程序员,学Java还是Python?码农:想快点月薪过万就选它...
  7. python中字典类型中的item是什么-Python中的字典介绍
  8. 物以类聚:对象也有生命
  9. LXReorderableCollectionViewFlowLayout
  10. win7字体大小怎么设置_XP,win7系统怎么设置自动关机
  11. Use the onReadyStateChange Property (Visual Basic)
  12. 三维扫描3D打印在创客教育中的实际应用
  13. python:实现培根密码算法(附完整源码)
  14. 探究文华盘整(PANZHENG)函数之一
  15. CodeForces #379(734A|734B|734C|734D|734E|734F)|二分查找|模拟|树的半径|位运算
  16. python人民币转大写_python2.x实现人民币转大写人民币
  17. poi word转html 根号,二次根式计算题-20210402033540.docx-原创力文档
  18. AX2012小问题总结
  19. Android PopupWindow监听点击外部事件
  20. android 编译luajit,【最新最全】为 iOS 和 Android 的真机和模拟器编译 Luajit 库

热门文章

  1. Kony 如何获取Android context
  2. GPS从入门到放弃(十五)、DCB差分码偏差
  3. matlab中 cos(pi/2) sin(pi)不等于0怎么办
  4. Facebook在美上线相亲功能,微软AI成为麻将冠军!...|一周热闻回顾
  5. 《血族》全民模式火热开启 南北之战一触即发
  6. 迅雷链同构多链框架解析
  7. Basic Level 1035 插入与归并 (25分)
  8. WPF的本地化思路提示:直接汉化BAML
  9. Spring cloud Eureka consumer 调用 provider ERROR:java.net.UnknownHostException: XXX-PAYMENT-SERVICE
  10. 如何将QQ号设置成手机号?