给你一个整数 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=10000
while (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;
}
}
}
给定一个整数数组 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 是一种散列表,用于存储 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):添加元素
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];
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。
示例 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 类型的一个成员方法。它的目的是返回字符串的内容长度。