- 🧛♂️个人主页:杯咖啡
- 💡进步是今天的活动,明天的保证!
- ✨目前正在学习: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.
怕输的人已经输了。 - 《权力的游戏》😎