首页 > 编程语言 >Java顺序查找知识点(含面试大厂题和源码)

Java顺序查找知识点(含面试大厂题和源码)

时间:2024-03-31 10:01:05浏览次数:20  
标签:知识点 Java String nums int 查找 源码 result public

顺序查找(Sequential Search),也称为线性查找,是一种简单直观的查找算法。它通过逐个检查数据集中的每个元素来查找目标值。顺序查找不要求数据集是有序的,因此它适用于任何形式的数据集,包括数组、链表、列表等。

顺序查找的工作原理:

  1. 开始查找:从数据集的起始位置开始。
  2. 逐个比较:将目标值与当前位置的元素进行比较。
  3. 匹配或继续:如果目标值与当前元素相等,则查找成功;如果不相等,移动到下一个位置继续比较。
  4. 到达终点:如果遍历完整个数据集都没有找到目标值,则查找失败。

顺序查找的优缺点:

优点

  • 简单易实现:顺序查找的算法逻辑非常简单,易于理解和实现。
  • 不要求有序:不需要数据集事先排序,适用于任何无序的数据集。

缺点

  • 效率较低:在最坏的情况下,顺序查找需要遍历整个数据集才能找到目标值或确定目标值不存在,因此时间复杂度为 O(n)。
  • 空间复杂度:顺序查找不需要额外的存储空间,空间复杂度为 O(1)。

顺序查找的Java实现:

public class SequentialSearch {
    public int sequentialSearch(int[] array, int target) {
        for (int i = 0; i < array.length; i++) {
            if (array[i] == target) {
                return i; // 返回目标值的索引
            }
        }
        return -1; // 如果没有找到,返回-1
    }

    public static void main(String[] args) {
        SequentialSearch search = new SequentialSearch();
        int[] array = {3, 5, 7, 9, 11};
        int target = 9;
        int result = search.sequentialSearch(array, target);
        System.out.println("Index of " + target + " is: " + result);
    }
}

在面试中,了解顺序查找的原理和实现是非常重要的,尤其是当面试官询问如何处理无序数据集的查找问题时。顺序查找是最基本的查找方法,也是学习更高级查找算法(如二分查找、哈希查找等)的基础。

题目 1:找出数组中缺失的最小正整数

描述
给定一个包含 n 个正整数的数组,其中 n 也是正整数。数组中的数唯一且在 1 到 n 之间,但可能不是连续的。找出所有数中缺失的最小正整数。

示例

输入: [2, 3, 4, 6, 7, 9, 12]
输出: 5

Java 源码

public class FindMissingPositive {
    public int findMissingPositive(int[] nums) {
        boolean[] marked = new boolean[nums.length + 1];
        for (int num : nums) {
            if (num <= nums.length && marked[num] == false) {
                marked[num] = true;
            }
        }
        for (int i = 1; i <= nums.length; i++) {
            if (!marked[i]) {
                return i;
            }
        }
        return -1; // 如果没有找到,返回-1
    }

    public static void main(String[] args) {
        FindMissingPositive solution = new FindMissingPositive();
        int[] nums = {2, 3, 4, 6, 7, 9, 12};
        int result = solution.findMissingPositive(nums);
        System.out.println("The missing positive number is: " + result);
    }
}

题目 2:存在重复元素 II

描述
给定一个整数数组和一个整数 k,找出数组中和为 k 的一对数字。你可以假设每对数字 (i, j) 都是唯一的,并且每对数字 (i, j) 最多只能使用一次。

示例

输入: nums = [2, 3, 4, 6, 7, 9, 12], k = 10
输出: [3, 7]

Java 源码

public class FindSumPairs {
    public List<List<Integer>> findSumPairs(int[] nums, int k) {
        List<List<Integer>> result = new ArrayList<>();
        for (int i = 0; i < nums.length; i++) {
            for (int j = i + 1; j < nums.length; j++) {
                if (nums[i] + nums[j] == k) {
                    result.add(Arrays.asList(nums[i], nums[j]));
                }
            }
        }
        return result;
    }

    public static void main(String[] args) {
        FindSumPairs solution = new FindSumPairs();
        int[] nums = {2, 3, 4, 6, 7, 9, 12};
        int k = 10;
        List<List<Integer>> result = solution.findSumPairs(nums, k);
        System.out.println("The pairs with sum " + k + " are: " + result);
    }
}

题目 3:字符串中的第一个唯一字符

描述
给定一个字符串,找到字符串中第一个不重复的字符。

示例

输入: "leetcode"
输出: "e"

Java 源码

public class FirstUniqueChar {
    public String firstUniqChar(String s) {
        int[] count = new int[26];
        for (char c : s.toCharArray()) {
            count[c - 'a']++;
        }
        for (char c : s.toCharArray()) {
            if (count[c - 'a'] == 1) {
                return String.valueOf(c);
            }
        }
        return "";
    }

    public static void main(String[] args) {
        FirstUniqueChar solution = new FirstUniqueChar();
        String s = "leetcode";
        String result = solution.firstUniqChar(s);
        System.out.println("The first unique character is: " + result);
    }
}

这些题目和源码展示了顺序查找在解决实际问题中的应用。在面试中,能够根据问题的特点选择合适的算法并实现其解决方案是非常重要的。希望这些示例能够帮助你更好地准备面试!

标签:知识点,Java,String,nums,int,查找,源码,result,public
From: https://blog.csdn.net/2302_80314137/article/details/137192745

相关文章

  • java毕业设计青少年视力筛查系统(Springboot+mysql+jdk1.8+maven3.39)
    本系统(程序+源码)带文档lw万字以上 文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义选题背景:在当今社会,随着科技的发展和生活节奏的加快,青少年的视力健康问题日益凸显。长时间使用电子产品、不合理的阅读习惯以及缺乏户外活动等因素导致青少年近视......
  • Java常用新特性之Stream API
    一,认识Stream1.StreamAPIvs集合框架StreamAPI之于集合就类似于SQL之于数据表。集合:存储数据,基于内存的。StreamAPI:处理数据,基于CPU的3.使用说明①Stream自己不会存储元素。②Stream不会改变源对象。相反,他们会返回一个持有结果的新Stream。③Stream......
  • java毕业设计上门医疗服务小程序(Springboot+mysql+jdk1.8+maven3.39)
    本系统(程序+源码)带文档lw万字以上 文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义选题背景:随着社会的发展和人口老龄化的加剧,人们对医疗服务的需求日益增长,特别是对于便捷、高效的上门医疗服务。传统的医疗服务模式要求患者亲自前往医院或诊所就......
  • java毕业设计汽车租赁系统(Springboot+mysql+jdk1.8+maven3.39)
    本系统(程序+源码)带文档lw万字以上 文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义选题背景:随着共享经济的兴起和汽车产业的发展,汽车租赁作为一种新兴的出行方式逐渐受到人们的欢迎。传统的汽车租赁业务多依赖于线下门店操作,顾客需要到店选车、签......
  • java毕业设计天勤人力资源管理(Springboot+mysql+jdk1.8+maven3.39)
    本系统(程序+源码)带文档lw万字以上 文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义一、选题背景:在当今竞争激烈的商业环境中,人力资源管理(HRM)对于组织的成功至关重要。有效的HRM不仅能够提高员工的工作效率和满意度,而且可以促进企业的整体发展战......
  • java毕业设计数字家谱管理系统(Springboot+mysql+jdk1.8+maven3.39)
    本系统(程序+源码)带文档lw万字以上 文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义一、选题背景:在快速变化的社会中,人们越来越意识到家族历史和文化传承的重要性。家谱作为记录家族血脉和历史的重要文献,承载着丰富的文化价值和历史信息。然而,传统......
  • 《手把手教你》系列技巧篇(六十二)-java+ selenium自动化测试-RemoteWebDriver让你的代
    1.简介当本机上没有浏览器,需要远程调用浏览器进行自动化测试时,需要用到RemoteWebDirver。宏哥申请服务器还没有下来,也懒得自己在本地安装虚拟机,等的时间太长了于是就网上找了一个可以免费试用2天的服务器(网址:DedicatedServerHostingService|BareMetal|Varidata),注册一......
  • 《手把手教你》系列技巧篇(六十一)-java+ selenium自动化测试 - 截图三剑客 -下篇(详细教
    1.简介按照计划宏哥今天将介绍java+selenium自动化测试截图操作实现的第三种截图方法,也就是截图的第三剑客-截取某个元素(或者目标区域)的图片。在测试的过程中,有时候不需要截取整个屏幕,只需要截取某个元素(或者目标区域)的图片,今天宏哥就来讲解和分享这些内容。2. 截取某个......
  • Uniswap V2源码解读
    Uniswap是一个开源的去中心化的交易所,在github上面有以下重要仓库:uniswap-v2-core:币对池pair的核心智能合约。这个repository包含了Uniswap的币对池pair的所有核心逻辑,增加流动性、减少流动性等。uniswap-v2-periphery:这个repository包含了UniswapV3的所有周边智能合约。这些......
  • Java学习计划和之后的规划
    Java是一种广泛使用的编程语言,以其“一次编写,到处运行”的能力而闻名。对初学者来说,学习Java可以是一个既充满挑战又充满回报的旅程。以下是一份详细的学习计划,可帮助初学者入门并在Java编程世界中稳步前进。##第一阶段:基础入门(1-3个月)###目标-理解Java的基础概念和语法......