服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - 剑指Offer之Java算法习题精讲数组查找与字符串交集

剑指Offer之Java算法习题精讲数组查找与字符串交集

2022-10-14 14:30明天一定. Java教程

跟着思路走,之后从简单题入手,反复去看,做过之后可能会忘记,之后再做一次,记不住就反复做,反复寻求思路和规律,慢慢积累就会发现质的变化

题目一

数组题——二分查找法

写一个函数查找给定的数组中指定的数值

具体题目如下

剑指Offer之Java算法习题精讲数组查找与字符串交集

 解法

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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]<target){
                left = mid + 1;
            }
        }
        return -1;
    }
}

题目二

数组题——查找数组中元素位置

根据给定的数组按照指定条件查找首尾元素位置

具体题目如下

剑指Offer之Java算法习题精讲数组查找与字符串交集

 解法:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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){
                left = mid+1;
            }
        }
        left = 0;
        right =  nums.length-1;
        while(left<=right){
            int mid = left+(right-left)/2;
            if(nums[mid] == target){
                res[1] = mid;
                left = mid+1;
            }else if(nums[mid]>target){
                right = mid - 1;
            }else if(nums[mid]<target){
                left = mid+1;
            }
        }
        return res;       
    }
}

题目三

字符串题——查找字符串交集

根据给定的字符串按照指定条件查找一个字符串所涵盖的另一个字符串字符的最小子串

具体题目如下

剑指Offer之Java算法习题精讲数组查找与字符串交集

解法

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
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;
        int  min = 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算法习题精讲数组查找与字符串交集的文章就介绍到这了,更多相关Java 数组查找内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/wai_58934/article/details/123009766

延伸 · 阅读

精彩推荐
  • Java教程Java Apache Shiro安全框架快速开发详解流程

    Java Apache Shiro安全框架快速开发详解流程

    Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理。使用Shiro的易于理解的API,您可以快速、轻松地获得任何应用程序,从最小...

    龍弟-idea9892022-03-02
  • Java教程@ComponentScan注解用法之包路径占位符解析

    @ComponentScan注解用法之包路径占位符解析

    这篇文章主要介绍了@ComponentScan注解用法之包路径占位符解析,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...

    君战5162021-11-21
  • Java教程JDK1.7以上javaFTP上传删除文件的实现方法

    JDK1.7以上javaFTP上传删除文件的实现方法

    下面小编就为大家分享一篇JDK1.7以上javaFTP上传删除文件的实现方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    OkidoGreen10512021-02-22
  • Java教程Mybatis 传输List的实现代码

    Mybatis 传输List的实现代码

    本文通过实例代码给大家介绍了mybatis传输list的实现代码,非常不错,具有参考借鉴价值,需要的朋友参考下吧...

    starkpan6142020-12-29
  • Java教程Java实现的求逆矩阵算法示例

    Java实现的求逆矩阵算法示例

    这篇文章主要介绍了Java实现的求逆矩阵算法,涉及java基于数组的矩阵遍历与运算相关操作技巧,需要的朋友可以参考下...

    LazyChun9612021-01-14
  • Java教程新手初学Java基础

    新手初学Java基础

    这篇文章主要介绍了java基础之方法详解,文中有非常详细的代码示例,对正在学习java基础的小伙伴们有非常好的帮助,需要的朋友可以参考下...

    魑魅魍魉怎么他就这么多11772021-09-29
  • Java教程Java实现选择排序算法的实例教程

    Java实现选择排序算法的实例教程

    这篇文章主要介绍了Java实现选择排序算法的实例教程,选择排序的时间复杂度为О(n²),需要的朋友可以参考下 ...

    飞翔的猫咪2852020-04-24
  • Java教程详解java线程的开始、暂停、继续

    详解java线程的开始、暂停、继续

    本文将介绍通过线程读取文件内容,并且可以控制线程的开始、暂停、继续,来控制读文件。具有一定的参考作用,下面跟着小编一起来看下吧...

    Joanna.Yan4752020-07-21