当前位置: 首页 > news >正文

做外贸网站建设电商网站建设计入什么科目

做外贸网站建设,电商网站建设计入什么科目,怎样找家做网站的公司,泰安网签数据目录 二分查找 在排序数组中查找元素的第一个和最后一个位置 总结二分模板 x 的平方根 搜索插入位置 山脉数组的峰顶索引 寻找峰值 寻找旋转排序数组中的最小值 0~n-1中缺失的数字 二分查找 二分查找算法 适用于数组有序的时候() 模板&#xff1…

 

目录

 

二分查找

在排序数组中查找元素的第一个和最后一个位置

总结二分模板

x 的平方根

搜索插入位置

山脉数组的峰顶索引

寻找峰值

寻找旋转排序数组中的最小值

0~n-1中缺失的数字


二分查找

二分查找算法

适用于数组有序的时候(×)

模板:

1. 朴素的二分模板 (easy->局限)

2. 查找左边界的二分模板 (万能,细节多)

3. 查找右边界的二分模板 (万能,细节多)

朴素二分模板: 

while(left<=right){int mid=left+(right-left)/2;if(...) left=mid+1;else if(...) right=mid-1;else return ...;
}

704. 二分查找 - 力扣(LeetCode)

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

查找区间左端点细节处理

1. 循环条件:left=right的时候,就是最终结果,无需判断;如果判断就会死循环

2. 求中点的操作:Ⅰ.left+(right-left)/2 Ⅱ.left+(right-left+1)/2;(死循环)

查找区间右端点细节处理

1. 循环条件:left=right的时候,就是最终结果,无需判断;如果判断就会死循环

2. 求中点的操作:Ⅰ.left+(right-left)/2 (死循环)Ⅱ.left+(right-left+1)/2;

总结模板:

查找区间左端点的模板

while(left<right){

        int mid=left+(right-left)/2;

        if(...) left=mid+1;

        else right=mid;

}

查找区间右端点的模板

while(left<right){

        int mid=left+(right-left+1)/2;

        if(...) left=mid;

        else right=mid-1;

}

在排序数组中查找元素的第一个和最后一个位置

34. 在排序数组中查找元素的第一个和最后一个位置 - 力扣(LeetCode)

解法一:暴力查找

解法二:朴素二分

查找区间左端点解题思路

x<t时left=mid+1

x≥t时right=mid

查找区间左端点细节处理

1. 循环条件为left<right,而不是left≤right(left=right的时候,就是最终结果,无需判断,若判断,则死循环)

2. 求中点的操作:left+(right-left)/2若使用left+(right-left+1)/2则死循环

 查找区间右端点解题思路

x<t时left=mid

x≥t时right=mid-1

查找区间右端点细节处理

1. 循环条件为left<right,而不是left≤right(left=right的时候,就是最终结果,无需判断,若判断,则死循环)

2. 求中点的操作:left+(right-left+1)/2若使用left+(right-left)/2则死循环

class Solution {public int[] searchRange(int[] nums, int target) {int[] ret = new int[2];ret[0] = ret[1] = -1;if (nums.length == 0)return ret;int left = 0, right = nums.length - 1, mid = 0;while (left < right) {mid = left + (right - left) / 2;if (nums[mid] < target) {left = mid + 1;} else {right = mid;}}if (nums[left] != target)return ret;elseret[0] = left;right = nums.length - 1;while (left < right) {mid = left + (right - left + 1) / 2;if (nums[mid] <= target) {left = mid;} else {right = mid - 1;}}if (nums[left] != target)return ret;elseret[1] = left;return ret;}
}
总结二分模板
//查找区间左端点的模板:
while(left<right){int mid=left+(right-left)/2;if(...) left=mid+1;else right=mid;
}
//查找区间右端点的模板:
while(left<right){int mid=left+(right-left+1)/2;if(...) left=mid;else right=mid-1;
}
x 的平方根

69. x 的平方根 - 力扣(LeetCode)

解题思路

mid*mid≤x时left=mid

mid*mid>x时right=mid-1

class Solution {public int mySqrt(int x) {long left = 0, right = x;while (left < right) {long mid = left + (right - left + 1) / 2;if (mid * mid <= x)left = mid;elseright = mid - 1;}return (int) left;}
}
搜索插入位置

35. 搜索插入位置 - 力扣(LeetCode)

class Solution {public int searchInsert(int[] nums, int target) {int left = 0, right = nums.length - 1, mid = 0;if (nums[left] > target)return 0;if (nums[right] < target)return nums.length;while (left < right) {mid = left + (right - left) / 2;if (nums[mid] < target) {left = mid + 1;} else {right = mid;}}return left;}
}
山脉数组的峰顶索引

852. 山脉数组的峰顶索引 - 力扣(LeetCode)

解法一:暴力枚举

解法二:二分查找算法(符合二段性,尽管不是有序数组)

arr[mid]>arr[mid-1]时,left=mid

arr[mid]<arr[mid-1]时,right=mid-1

class Solution {public int peakIndexInMountainArray(int[] arr) {int left = 1, right = arr.length - 2;// 第一个元素和最后一个元素绝对不会是峰顶int mid = 0;while (left < right) {mid = left + (right - left + 1) / 2;// 后面有-1,此处+1if (arr[mid] > arr[mid - 1])left = mid;else if (arr[mid] < arr[mid - 1])right = mid - 1;elsebreak;}return left;//}
}
寻找峰值

162. 寻找峰值 - 力扣(LeetCode)

解法一:暴力解法(从第一个位置开始,一直向后走,分情况讨论)

解法二:二分查找

arr[mid]>arr[mid+1]时,right=mid

arr[mid]<arr[mid+1]时,left=mid+1

class Solution {public int findPeakElement(int[] nums) {int left = 0, right = nums.length - 1, mid = 0;while (left < right) {mid = left + (right - left) / 2;if (nums[mid] < nums[mid + 1])left = mid + 1;else if (nums[mid] > nums[mid + 1])right = mid;elsebreak;}return left;//}
}
寻找旋转排序数组中的最小值

153. 寻找旋转排序数组中的最小值 - 力扣(LeetCode)

解法一:暴力查找最小值 O(n)

解法二:二分查找算法(二段性)

参考D点:A~B段:nums[i]>nums[n-1];C~D段:nums[i]<=nums[n-1];(D点下标为n-1)

A~B:nums[mid]>nums[n-1]时left=mid+1;

C~D:nums[mid]<=nums[n-1]时right=mid.

疑问:选择A点作为参照点是否可以?可以,但需要考虑边界情况

class Solution {public int findMin(int[] nums) {int left = 0, right = nums.length - 1, mid = 0;int n = nums.length;while (left < right) {mid = left + (right - left) / 2;if (nums[mid] > nums[n - 1])left = mid + 1;elseright = mid;}return nums[left];//}
}
0~n-1中缺失的数字

LCR 173. 点名 - 力扣(LeetCode)

解法一:哈希表

解法二:直接遍历找结果

解法三:位运算(异或:相同为零,相异为一)

解法四:高斯求和方式(数学方法)

以上解法时间复杂度均为O(n)

更优解法:二分

左区间:nums[mid]==mid时:left=mid+1;

右区间:nums[mid]! =mid时:right=mid.

细节

[0,1,2,3]

 0,1,2,3

class Solution {public int takeAttendance(int[] records) {int n = records.length;int left = 0, right = n - 1, mid = 0;if (records[n - 1] == n - 1)// 边界情况return n;while (left < right) {mid = left + (right - left) / 2;if (records[mid] == mid)left = mid + 1;elseright = mid;}return left;//}
}
http://www.dtcms.com/a/413582.html

相关文章:

  • jeecms做企业网站如何快速做h5网站
  • 孝感建设银行官网站中国新闻社是什么级别媒体
  • 哈尔滨网络公司网站建设会员制营销的优缺点
  • 怎样可以查看网站是由哪个公司做的网站降权投诉
  • 酒店如何做网站深圳卓富通做网站
  • 云服务器网站文件夹网站建设维护招聘
  • 网站建好了seo怎么做成都广告设计公司有哪些
  • 看想看的做想做的电影网站浙江做网站多少钱
  • 大学里读网站建设高校移动门户网站建设
  • 首页网站模板wordpress不同列表页
  • 深圳企业网站app开发wordpress引用jquery
  • 网站做直播需要什么资质美橙网站建设经典案例
  • 定制网站建设流程国家企业网
  • 制作个人网站怎么做湖南企业app
  • 网站改版404页面网站项目计划说明书
  • 美食美客网站建设项目规划书怎样做网站的用户分析
  • 怎么做视频网站推广赚钱平台有哪些
  • 网站社区的建设百盛联合建设集团网站
  • 网页搭建系统框图长春关键词排名优化
  • 响应式网站的优势有那些的呢wordpress微信公众号模板
  • 织梦网站统计代码网页美工薪酬范围
  • 自己弄个网站家政服务公司网站建设方案策划书
  • 浙江建设网站网站运营与公司
  • DNF做钓鱼网站网络营销是什么内容
  • 网站建设的基本流程是什么应用商店手机版下载
  • 网站设计展示个人信息怎么在百度推广
  • 用科讯cms做网站的步骤一个虚拟主机多个网站
  • 网站排名的重要性网络推广方案最新
  • 如何做家教网站企业做的网站计入什么科目
  • 绍兴企业做网站九度网站建设