当前位置: 首页 > news >正文

力扣题目-JAVA解法

1、回文数

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

解题思路:
通过计算 1221 / 1000, 得首位1
通过计算 1221 % 10, 可得末位 1
进行比较
再将 22 取出来继续比较,

class Solution {public boolean isPalindrome(int x) {{//边界判断if (x < 0) return false;int div = 1;//用一个变量记录数字的最高位的值,如12456的div=10000while (x / div >= 10) div *= 10;while (x > 0) {int left = x / div;int right = x % 10;if (left != right) return false;//此步骤的作用是去掉首位和末位x = (x % div) / 10;//去掉首位和末位之后,少了两位值,最高位的值应该降低100倍。div /= 100;}return true;}            }
}

2、两数之和

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。

class Solution {public int[] twoSum(int[] nums, int target) {Map<Integer, Integer> map = new HashMap<>();for(int i = 0; i< nums.length; i++) {if(map.containsKey(target - nums[i])) {return new int[] {map.get(target-nums[i]),i};}//为什么不存在则将当前的 (nums[i],i) 存入 map 中?因为map里最初是空的,需要逐渐将数组的值放入map中。map.put(nums[i], i);}throw new IllegalArgumentException("No two sum solution");}
}

知识点

1、HashMap

1)基本介绍
HashMap 是一种散列表,用于存储 key-value 键值对的数据结构,一般翻译为“哈希表”,提供平均时间复杂度为 O(1) 的、基于 key 级别的 get/put 等操作。
hashmap的底层是链表+数组,查找和插入的时间复杂度都是O(1)
key不能重复、value值可以重复
2)HashMap的有序性
无序:Java 8之前+Java 8之后元素的数量未达到8个或table数组长度达到64
有序:当hashmap中元素的数量达到8个并且table数组长度达到64的时候,就会将链表转换成红黑树

基本方法:
map.containsKey(key):判断该key在map中是否有key存在。如果存在则返回true。如果不存在则返回false。
map.get(key):返回指定键所映射的值。(为了提高效率和避免出现空指针等异常:尽量使用不可变对象作为Map的key;)
map.put(key,value):添加元素

2、数组

https://blog.csdn.net/ji_meng/article/details/126143070
数组是一种有序的数据结构,用来存储同一类型的集合,也就是说数组包含的变量必须是相同类型!
//动态初始化
数据类型[ ] 数组名 = new 数组名[ ]{ value1,value2,……};
eg. int[ ] arr = new arr[ ] {1,2,3};

//静态初始化 (数组元素的个数和初始化数据的格式是一样的)
数据类型[ ] 数组名 = new 数据类型[ 数组长度 ]
eg. int[ ] array = new int[10];

3、最长公共前缀

编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。
示例 1:
输入:strs = [“flower”,“flow”,“flight”]
输出:“fl”
示例 2:
输入:strs = [“dog”,“racecar”,“car”]
输出:“”
解释:输入不存在公共前缀。

提示:
1 <= strs.length <= 200
0 <= strs[i].length <= 200
strs[i] 仅由小写英文字母组成

class Solution {public String longestCommonPrefix(String[] strs) {if(strs.length==0)return "";String ans = strs[0];for(int i=1;i<strs.length;i++){//int j=0;for (;j<ans.length()&&j<strs[i].length();j++){               if(ans.charAt(j)!=strs[i].charAt(j))break;}//这里需要用到j,所以上面定义j不能在for的内部               ans = ans.substring(0, j);if(ans.equals(""))return "";}return ans;}
}

知识点:
length和length()的区别:
length 是 Java 中数组的一个属性,它用于返回数组的长度。
length() 是一个方法,它是 String 类型的一个成员方法。它的目的是返回字符串的内容长度。

4、有效的括号

给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
每个右括号都有一个对应的相同类型的左括号。

示例 1:
输入:s = “()”
输出:true
示例 2:
输入:s = “()[]{}”
输出:true
示例 3:
输入:s = “(]”
输出:false

class Solution {public boolean isValid(String s) {//先判断奇偶,长度为奇数不可能闭合,直接返回falseint n=s.length();if(n%2==1){return false;}Map<Character, Character> pairs = new HashMap<Character, Character>(){{put(')','(');put('}','{');put(']','[');}};Deque<Character> stack = new LinkedList<Character>();for(int i=0;i<n;i++){char ch = s.charAt(i);//若为遇到字符串右括号,继续判断逻辑;若为左括号,则入栈if(pairs.containsKey(ch)){//是否遇到右括号//若栈为空,或者取出栈顶的左括号匹配到相同类型的右括号,跳出;反之,则删除栈顶左括号。//stack.peek()取栈顶元素—左括号//pairs.get(ch)取匹配的相同类型的左括号if(stack.isEmpty() || stack.peek()!=pairs.get(ch)){return false;}stack.pop();}else{//将这个左括号放入栈顶stack.push(ch);}}return stack.isEmpty();}
}

提示:
https://mikechen.cc/28175.html
1 <= s.length <= 104
s 仅由括号 ‘()[]{}’ 组成
Map<Character, Character> pairs = new HashMap<Character, Character>(){{
put(‘(’,‘)’);
put(‘{’,‘}’);
put(‘[’,‘]’);
}};
Deque stack = new LinkedList();
stack.peek()
charAt()
在HashMap中经常用到containsKey()来判断键(key)是否存在

栈的基本方法:
peek() :返回栈顶元素,不在堆栈中删除它。
pop() :返回栈顶元素,并在进程中删除它。
push():在栈顶增加元素

相关文章:

  • XSS语句
  • 深入理解Flutter中的GlobalKey与LocalKey(ValueKey、ObjectKey、UniqueKey)及其使用方法
  • JavaEE之多线程编程:5. 死锁(详解!!!)
  • 《设计模式的艺术》笔记 - 观察者模式
  • Rsync服务
  • R语言【taxa】——n_subtaxa(),n_supertaxa():每个类群的子类群数量和父类群数量
  • 使用__missing__方法实现映射表多格式主键
  • Windows AD 组策略 通过脚本修改管理员密码:以安全方式
  • nc转tif
  • 全栈工程师
  • 【C++入门到精通】智能指针 shared_ptr循环引用 | weak_ptr 简介及C++模拟实现 [ C++入门 ]
  • 【笔记】Helm-4 最佳实践-2 values
  • 01.领域驱动设计:微服务设计为什么要选择DDD学习总结
  • 2024年【G2电站锅炉司炉】新版试题及G2电站锅炉司炉作业考试题库
  • Layui技术积累
  • hexo+github搭建个人博客
  • JavaScript 如何正确处理 Unicode 编码问题!
  • 《剑指offer》分解让复杂问题更简单
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
  • download使用浅析
  • Fastjson的基本使用方法大全
  • golang 发送GET和POST示例
  • Java小白进阶笔记(3)-初级面向对象
  • Nginx 通过 Lua + Redis 实现动态封禁 IP
  • node.js
  • python 学习笔记 - Queue Pipes,进程间通讯
  • win10下安装mysql5.7
  • 复习Javascript专题(四):js中的深浅拷贝
  • 工作中总结前端开发流程--vue项目
  • 前嗅ForeSpider教程:创建模板
  • 实现菜单下拉伸展折叠效果demo
  • 小程序上传图片到七牛云(支持多张上传,预览,删除)
  • 用jquery写贪吃蛇
  • 优秀架构师必须掌握的架构思维
  • 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes ...
  • ​secrets --- 生成管理密码的安全随机数​
  • ​力扣解法汇总1802. 有界数组中指定下标处的最大值
  • #define用法
  • $().each和$.each的区别
  • (12)Hive调优——count distinct去重优化
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (MIT博士)林达华老师-概率模型与计算机视觉”
  • (vue)页面文件上传获取:action地址
  • (附源码)ssm考生评分系统 毕业设计 071114
  • (十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)
  • (学习日记)2024.01.19
  • (转) SpringBoot:使用spring-boot-devtools进行热部署以及不生效的问题解决
  • (转载)跟我一起学习VIM - The Life Changing Editor
  • ***利用Ms05002溢出找“肉鸡
  • .net core使用ef 6
  • .net6Api后台+uniapp导出Excel
  • .net的socket示例
  • /etc/X11/xorg.conf 文件被误改后进不了图形化界面