思路:从数组的右上方看,类似一个二叉树。当前数字比target大,则向左侧移动;当前数字比target小,则向下移动。
public boolean findNumberIn2DArray(int[][] matrix, int target) {
if (matrix == null || matrix.length==0)
return false;
int m=matrix.length,n=matrix[0].length;
int row=0,col=n-1;
while (row<m &&col>=0){
if (matrix[row][col]>target){
col--;
}else if (matrix[row][col]<target){
row++;
}else {
return true;
}
}
return false;
}
思路:遍历数组,找到第一个小于前方数组元素的元素即为所求。如果没有,说明是有序数组,返回第一个元素。
public int minArray(int[] numbers) {
int min = numbers[0];
for (int i=0;i<numbers.length-1;i++){
if (numbers[i+1]<numbers[i]){
min = numbers[i+1];
break;
}
}
return min;
}
思路:先考虑字符串为空和只有一个字符的情况。(创建26个字母的字典)第一次遍历记录各字符出现的次数,第二次遍历搜索出现次数为1的字符。
public char firstUniqChar(String s) {
if (s==null || s.length()==0)
return ' ';
if (s.length()==1)
return s.charAt(0);
int[] target = new int[26];
for (int i=0;i<s.length();i++){
target[s.charAt(i)-'a']++;
}
for (int i=0;i<s.length();i++){
if (target[s.charAt(i)-'a']==1)
return s.charAt(i);
}
return ' ';
}