算法刷题——7.3习题

简介: 算法刷题——7.3习题

✨前言


美好的一天从算法刷题开始,今天的四题准备就绪。

1.二分查找

2.找出数组排序后的目标下标

3.寻找重复数

4.Binary Deque

小伙伴们一起学习吧!!😎


文章目录


一、二分查找


题目描述

给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。


来源:力扣(LeetCode)

链接:https://leetcode.cn/problems/binary-search


思路详解


首先呢,定义左边界和右边界,通过左右边界找到中间值,

如果中间值比目标值小,就把中间值的后一位下标设置为左边界,继续找中间值比较;

如果中间值比目标值大,就把中间值的前一位下标设置为右边界,继续找中间值比较。

直到找到目标值,如果找完没找到,就表示数组中没有目标值。


代码与结果

class Solution {
    public int search(int[] nums, int target) {
        int left = 0, right = nums.length - 1;
        while (left <= right) {
            int mid = (right - left) / 2 + left;
            int num = nums[mid];
            if (num == target) {
                return mid;
            } else if (num > target) {
                right = mid - 1;
            } else {
                left = mid + 1;
            }
        }
        return -1;
    }
}

二、找出数组排序后的目标下标


题目描述


给你一个下标从 0 开始的整数数组 nums 以及一个目标元素 target 。

目标下标 是一个满足 nums[i] == target 的下标 i 。

将 nums 按 非递减 顺序排序后,返回由 nums 中目标下标组成的列表。如果不存在目标下标,返回一个 空 列表。返回的列表必须按 递增 顺序排列。


来源:力扣(LeetCode)

链接:https://leetcode.cn/problems/find-target-indices-after-sorting-array


思路详解


本题首先想到的就是,先建立一个空的res数组,通过排序后的数组进行遍历查找,找到就加到res中。


代码与结果

class Solution {
    public List<Integer>  targetIndices(int[] nums, int target) {
       List<Integer> res = new ArrayList<Integer>();
       Arrays.sort(nums);
       for(int i = 0 ; i < nums.length; i++){
           if(nums[i] == target) res.add(i);
       }
       return res;
    }
}


三、寻找重复数


题目描述


给定一个包含 n + 1 个整数的数组 nums ,其数字都在 [1, n] 范围内(包括 1 和 n),可知至少存在一个重复的整数。

假设 nums 只有 一个重复的整数 ,返回 这个重复的数 。

你设计的解决方案必须 不修改 数组 nums 且只用常量级 O(1) 的额外空间。


来源:力扣(LeetCode)

链接:https://leetcode.cn/problems/find-the-duplicate-number


思路详解


根据题意,我们首先拷贝一个临时数组,然后对其进行排序,由于只有一个是重复的整数,我们只需要进行循环遍历找到和前一个数相同的,直接输出就好。


代码与结果

class Solution {
    public int findDuplicate(int[] nums) {
       int[] temp = new int[nums.length];
        for(int i = 0;i < nums.length; i++){
            temp[i] = nums[i];
        }
        Arrays.sort(temp);
        for(int j = 1;j < nums.length;j++){
            if(temp[j] == temp[j - 1])  return temp[j];
        }
        return 0;
    }
}

✨总结


以上算法有的时间复杂度也是较高的,有更好方法的小伙伴欢迎评论区留言。

看到这里的小伙伴留个赞赞再走吧,欢迎一起讨论算法哦。🐳


😎The man who fears losing has already lost.

怕输的人已经输了。 - 《权力的游戏》😎

相关文章
|
3月前
|
存储 算法 C语言
【数据结构与算法 刷题系列】合并两个有序链表
【数据结构与算法 刷题系列】合并两个有序链表
|
3月前
|
算法
数据结构和算法学习记录——习题-移除链表元素
数据结构和算法学习记录——习题-移除链表元素
20 0
|
3月前
|
机器学习/深度学习 搜索推荐 算法
【再识C进阶2(下)】详细介绍指针的进阶——利用冒泡排序算法模拟实现qsort函数,以及一下习题和指针笔试题
【再识C进阶2(下)】详细介绍指针的进阶——利用冒泡排序算法模拟实现qsort函数,以及一下习题和指针笔试题
|
28天前
【刷题记录】最大公因数,最小公倍数(辗转相除法、欧几里得算法)
【刷题记录】最大公因数,最小公倍数(辗转相除法、欧几里得算法)
|
1月前
|
算法 Python
【Leetcode刷题Python】改进的算法,高效求一个数的因子
一个高效的Python函数用于找出一个整数的所有因子,通过仅遍历到该数平方根的范围来优化性能。
28 0
|
3月前
|
算法 C++
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题-2
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题
|
3月前
|
算法 C++
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题-1
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题
|
3月前
|
算法 C语言
数据结构和算法学习记录——栈和队列习题-用队列实现栈、用栈实现队列(核心思路、解题过程、完整题解)二
数据结构和算法学习记录——栈和队列习题-用队列实现栈、用栈实现队列(核心思路、解题过程、完整题解)二
29 2
|
3月前
|
存储 算法 测试技术
数据结构学习记录——树习题-Complete Binary Search Tree(题目描述、输入输出示例、数据结构的选择、核心算法、计算左子树的规模)
数据结构学习记录——树习题-Complete Binary Search Tree(题目描述、输入输出示例、数据结构的选择、核心算法、计算左子树的规模)
55 1
|
3月前
|
算法
【数据结构与算法 刷题系列】求带环链表的入环节点(图文详解)
【数据结构与算法 刷题系列】求带环链表的入环节点(图文详解)