算法刷题——7.3习题

  • 🧛‍♂️个人主页:杯咖啡
  • 💡进步是今天的活动,明天的保证!
  • ✨目前正在学习:SSM框架,算法刷题
  • 🙌牛客网,刷算法过面试的神级网站,用牛客你也牛。 👉免费注册和我一起学习刷题👈
  • 🐳希望大家多多支持🥰一起进步呀!
  • 😎The man who fears losing has already lost.
    怕输的人已经输了。 - 《权力的游戏》

✨前言

美好的一天从算法刷题开始,今天的四题准备就绪。
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.
怕输的人已经输了。 - 《权力的游戏》😎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风铃听雨~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值