慢慢学习Java
一:两数之和
暴力算法:
思路比较清晰,经典两个for循环+一个if
class Solution {
public int[] twoSum(int[] nums, int target) {
int[] indexs = new int[2];
for (int i = 0; i < nums.length; i++) {
for (int j =i+1;j<nums.length;j++ ){
if (nums[j] == target-nums[i]){
indexs[0] = i;
indexs[1] = j;
break;
}
}
}
return indexs;
}
}
第二种方法:下面一段抄自代码随想录
HashMap
map用来做什么
map中key和value分别表示什么
map目的用来存放我们访问过的元素,因为遍历数组的时候,需要记录我们之前遍历过哪些元素和对应的下表,这样才能找到与当前元素相匹配的(也就是相加等于target)
接下来是map中key和value分别表示什么。
这道题 我们需要 给出一个元素,判断这个元素是否出现过,如果出现过,返回这个元素的下标。
那么判断元素是否出现,这个元素就要作为key,所以数组中的元素作为key,有key对应的就是value,value用来存下标。
所以 map中的存储结构为 {key:数据元素,value:数组元素对应的下表}。
在遍历数组的时候,只需要向map去查询是否有和目前遍历元素比配的数值,如果有,就找到的匹配对,如果没有,就把目前遍历的元素放进map中,因为map存放的就是我们访问过的元素。
1:两数之和
注意:分清楚谁是k和v
第一步:判断数组长度如果为0或空直接返回空的数组
第二步:遍历数组是,map去查询是否有和目前遍历元素比配的数值。如果有的话 往长度为2的数组里放i 和对应相加等于target的value值
array[1] = i;
array[0] = (int) map.get(temp);
/**
* 两数之和
*/
import java.util.HashMap;
public class test1 {
public static void main(String[] args) {
int[] array = new int[2];
int[] nums = {2, 7, 11, 15};
int target = 9;
if (nums == null || nums.length == 0) {
System.out.println(array);
}
HashMap<Object, Object> map = new HashMap<>();
for (int i = 0; i < nums.length; i++) {
int temp = target - nums[i];
if (map.containsKey(temp)) {
array[1] = i;
array[0] = (int) map.get(temp);
}
map.put(nums[i], i);
}
for (int i = 0; i < array.length; i++) {
if (i == 0) {
System.out.println(array[i]);
} else {
}
System.out.println(" " + array[i]);
}
}
}
2.回文数
给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
第一点:负数不是回文数
第一步:将int转换成字符串 可以用来遍历 String.valueOf(x)
第二步:倒序遍历,获取字符串的值 用CharAT(i) 给定一个空的字符串加上去
第三步:两者相等 返回true 否则返回false
class Solution {
public boolean isPalindrome(int x) {
if (x>=0){
String X = String.valueOf(x);
String Y = "";
for (int i = X.length()-1; i >=0; i--) {
String temp1 = String.valueOf(X.charAt(i));
Y += temp1;
}
return X.equals(Y);
}
return false;
}
}