阅读 134

剑指offer计划5(查找算法中等版)---java

1.1、题目1

剑指 Offer 04. 二维数组中的查找

1.2、解法

其实就是暴力解法的升级版,从最后一行开始判断,通过num当前的大小,

如果还是大于目标值则行数-1,若是小于则列数+1

1.3、代码

class Solution {    public boolean findNumberIn2DArray(int[][] matrix, int target) {        if(matrix==null || matrix.length==0 ||matrix[0].length==0){            return false;
        }        int rows = matrix.length,columns = matrix[0].length;        int row = 0,column= matrix[0].length-1;        while(row<rows && column>=0){            int num=matrix[row][column];            if(num==target) return true;            else if(num>target) column--;            else row++;
        }        return false;

    }
}

2.1、题目2

剑指 Offer 11. 旋转数组的最小数字

2.2、解法

这题题目说明了是旋转数组,我个人理解,就是数组被平移过,

原先是排序好的。这里我用二分查找的方法,判断中间和右边的值的比较,

若是中间值较大,说明,最小值在右边,若是中间值较小,说明最小值在左边。

中间值大时,left变成mid+1,从而达到将二分查找的范围缩小到右半部分

中间值小时同理,若是中间值与右边值相同,right-1。

最终左边与右边重合,范围左边值。

2.3、代码

class Solution {    public int minArray(int[] numbers) {        int len=numbers.length,left=0,right=len-1;        while(left<=right){            int mid = left+(right-left)/2;            if(numbers[mid]>numbers[right]){
                left=mid+1;
            }else if(numbers[mid]<numbers[right]){
                right=mid;
            }else right--;
        }        return numbers[left];
    }
}

3.1、题目3

剑指 Offer 50. 第一个只出现一次的字符

3.2、解法

我这题突发奇想用hashmap来实现该题目,LinkedHashMap可以实现按put的顺序取出。

getOrDefault取数据加1,再遍历得值

3.3、代码

class Solution {    public char firstUniqChar(String s) {        if (s=="") return ' ';        char []c = s.toCharArray();
        HashMap<Character,Integer> map = new LinkedHashMap<Character,Integer>();        for(char i:c){
            map.put(i,map.getOrDefault(i,0)+1);
        }        for (Character key : map.keySet()) {	        if(map.get(key)==1){                return key;
            }
        }        return ' ';
    }
}

服务器评测 http://www.cncsto.com/ 

服务器测评 http://www.cncsto.com/ 

站长资源 https://www.cscnn.com/ 

小鱼创业 https://www.237fa.com/ 


文章分类
后端
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐