不到万不得已不使用暴力破解法
水平有限,仅供自己熟悉算法使用。
1 两数之和
误区:将数组排序,比较a[0] + a[n] 和 target大小,此时可以找到这样的两个元素,但是由于排序导致了元素下标的改变。
正解:使用HashMap,先将数据存储到hashmap中,然后遍历。
public int[] twoSum(int[] nums, int target) {
//注意key和value的值
Map<Integer,Integer> map = new HashMap();
for(int i=0;i<nums.length;i++) {
map.put(nums[i],i);
}
for(int i=0;i<nums.length;i++) {
int res = target - nums[i];
if(map.containsKey(res) && map.get(res) != i) {
return new int[]{i,map.get(res)};
}
}
throw new IllegalArgumentException("No two sum solution");
}
20. 有效的括号
分析:对于括号的匹配问题应该用栈来处理,遇到左边入栈,遇到右边出栈并判断是不是对应的括号,处理过程中需判断栈是否为空,此外需要注意输入字符串为空情况。
public boolean isValid(String s) {
Stack<Character> stack = new Stack<>();
int len = s.length();
if(s.isEmpty()) {
return true;
}
for(int i = 0;i < len; i++) {
char ch = s.charAt(i);
if(stack.empty() && (ch != '(' && ch != '[' && ch != '{')) {
return false;
}
switch (ch) {
case '(' :
case '{' :
case '[' :
stack.push(ch);
break;
case ')' :
if(stack.pop() != '(') {
return false;
}
break;
case ']' :
if(stack.pop() != '[') {
return false;
}
break;
case '}' :
if(stack.pop() != '{') {
return false;
}
break;
default:
return false;
}
}
//判断栈是否为空
if(!stack.empty()) {
return false;
}
return true;
}
转载:https://blog.csdn.net/BHC008/article/details/101200592
查看评论