剑指offer计划5(查找算法中等版)---java
2021/9/7 11:06:14
本文主要是介绍剑指offer计划5(查找算法中等版)---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
这篇关于剑指offer计划5(查找算法中等版)---java的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-09-19JAVA 企业级项目入门:从零开始的实战指南
- 2024-09-19Java 企业级项目入门:从零基础到实战的进阶之路
- 2024-09-19Java 企业级项目入门:从零开始的实战指南
- 2024-09-18Java OA系统入门:从基础到实践
- 2024-09-18Java OA系统入门:从零开始的简单教程
- 2024-09-18JAVA OA系统入门:从零开始的实战指南
- 2024-09-18Java Web项目入门:快速搭建你的第一个Web应用
- 2024-09-18JAVA web项目入门:从零基础到实战的小白指南
- 2024-09-18Java Web项目入门:从零开始的轻量级教程
- 2024-09-18Java Web项目入门:快速搭建与基础实践