提卡网站要怎么做/网络推广外包加手机蛙软件
⭐️寒假新坑——代码之狐的每日做题笔记
😢寒假快到期了😢
540. 有序数组中的单一元素-Mid(二分查找变形)
给你一个仅由整数组成的有序数组,其中每个元素都会出现两次,唯有一个数只会出现一次。
请你找出并返回只出现一次的那个数。
你设计的解决方案必须满足 O(log n)
时间复杂度和 O(1)
空间复杂度。
class Solution {public int singleNonDuplicate(int[] nums) {int l=0;int r=nums.length-1;while(l<r){int mid=l+(r-l)/2;//如果mid前面都有序,必然有偶数下标等于其下一个奇数下标的值,以此作为范围缩小条件if((mid%2==0&&nums[mid]==nums[mid+1])||(mid%2==1&&nums[mid]==nums[mid-1])){l=mid+1;}else if((mid==0||nums[mid]!=nums[mid-1])&&(mid==nums.length-1||nums[mid]!=nums[mid+1])){return nums[mid];}else{r=mid-1;}}return nums[l];}
}
35. 搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
请必须使用时间复杂度为 O(log n)
的算法。
class Solution {public int searchInsert(int[] nums, int target) {int l=0;int r=nums.length-1;while(l<r){int mid=l+(r-l)/2;if(target<nums[mid]){r=mid-1;}else if(target==nums[mid]){return mid;}else{l=mid+1;}}if(nums[l]>=target)return l;elsereturn l+1;}
}
结尾
题目来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems
⭐️关注作者,带你刷题,从简单的算法题了解最常用的算法技能(寒假每日一题)
⭐️关注作者刷题——简单到进阶,让你不知不觉成为无情的刷题机器,有问题请私信