T1 04. 二维数组中的查找
krahets 大佬矩阵旋转45°得到二叉树
class Solution {
public boolean findNumberIn2DArray(int[][] matrix, int target) {
int i = matrix.length -1,j=0;
//矩阵范围内
while(i>=0 && j<matrix[0].length){
//从左下角向上找,比目标大消去一行,比目标小消去一列
if(matrix[i][j] > target) i--;
else if(matrix[i][j] <target) j++;
else return true;
}
return false;
}
}
T2 11. 旋转数组的最小数字
暴力法
class Solution {
public int minArray(int[] numbers) {
//倒序查找第一个左边比右边大的
int target =numbers[0];
for(int i=numbers.length-1;i>0;i--){
if(numbers[i-1]>numbers[i]){
target = numbers[i];
break; //跳出for
}
}
return target;
}
}
krahets 大佬二分法
class Solution {
public int minArray(int[] numbers) {
int i=0,j=numbers.length-1;
while(i<j){
int m = (i+j)/2;
if(numbers[m] > numbers[j]) i=i+1;
else if(numbers[m] <numbers[j]) j=m;
else j--; //相等向前移1位
}
return numbers[i];
}
}
T350. 第一个只出现一次的字符
大佬的思路:第一次遍历用哈希表存放字母和是否是多次的boolean
第二次遍历保证顺序拿到第一个为单次的字符
containsKey() | 检查 hashMap 中是否存在指定的 key 对应的映射关系。 |
---|
class Solution {
public char firstUniqChar(String s) {
Map<Character,Boolean> map = new HashMap<>();
char[] chars = s.toCharArray();
for(char c:chars){
map.put(c,!map.containsKey(c)); //重复false
}
for(char c:chars){
if(map.get(c)) return c;
}
return ' ';
}
}