ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2021-09-07 11:02:32  阅读:106  来源: 互联网

标签:map return matrix offer int --- length 查找 java


剑指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=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]

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 map = new LinkedHashMap();
        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 ' ';
    }
}

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

标签:map,return,matrix,offer,int,---,length,查找,java
来源: https://blog.csdn.net/wangxueying5172/article/details/120153789

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有