剑指Offer之Java算法习题精讲数组查找与字符串交集
题目一
数组题——二分查找法
写一个函数查找给定的数组中指定的数值
具体题目如下
文章图片
解法
class Solution {public int search(int[] nums, int target) {int left = 0; int right = nums.length - 1; while(left<=right){int mid = left+(right-left)/2; if(nums[mid]==target){return mid; }else if(nums[mid]>target){right = mid - 1; }else if(nums[mid]
题目二 数组题——查找数组中元素位置
根据给定的数组按照指定条件查找首尾元素位置
具体题目如下
文章图片
解法:
class Solution {public int[] searchRange(int[] nums, int target) {int[] res = {-1,-1}; int left = 0; int right = nums.length-1; while(left<=right){int mid = left+(right-left)/2; if(nums[mid] == target){res[0] = mid; right = mid-1; }else if(nums[mid]>target){right = mid - 1; }else if(nums[mid]target){right = mid - 1; }else if(nums[mid]
题目三 字符串题——查找字符串交集
根据给定的字符串按照指定条件查找一个字符串所涵盖的另一个字符串字符的最小子串
具体题目如下
文章图片
解法
class Solution {public String minWindow(String s, String t) {if(s == null || s == "" || t == null || t == "" || s.length() < t.length()){return ""; }int[] need = new int[128]; int[] have = new int[128]; for (int i = 0; i < t.length(); i++) {need[t.charAt(i)]++; }int left = 0, right = 0; intmin = s.length() + 1, count = 0, start = 0; while (right < s.length()){char r = s.charAt(right); if (need[r] == 0) {right++; continue; }if (have[r] < need[r]) {count++; }have[r]++; right++; while (count == t.length()){if (right - left < min) {min = right - left; start = left; }char l = s.charAt(left); if (need[l] == 0) {left++; continue; }if (have[l] == need[l]) {count--; }have[l]--; left++; }}if (min == s.length() + 1) {return ""; }return s.substring(start, start + min); }}
【剑指Offer之Java算法习题精讲数组查找与字符串交集】到此这篇关于剑指Offer之Java算法习题精讲数组查找与字符串交集的文章就介绍到这了,更多相关Java 数组查找内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
推荐阅读
- 每日算法之数组(二)
- Java深入了解数据结构之二叉搜索树增|Java深入了解数据结构之二叉搜索树增 插 删 创详解
- Golang|Golang 常见设计模式之装饰模式
- NutUI 3.1 正式发布(开启多端开发之路)
- 计算机网络|计算机网络学习——TCP/IP四层模型之应用层
- ElasticSearch7.3|ElasticSearch7.3 学习之定制分词器(Analyzer)
- Linux之yum命令
- 安卓开源框架学习|OKHttp原理讲解之RetryAndFollowUpInterceptor
- RocketMQ之NameServer架构设计及启动关闭流程源码分析
- 云原生技术kubernetes之volumes容器的使用