jjzjj

【学习笔记】二分

你觉得一个算法难,是因为你的大脑对未知世界的恐惧。——yxc简单讲讲二分二分是什么?顾名思义:就是一分为二(✓)它是一种在有序数组中查找某一特定元素的搜索算法怎么搜索呢?其实就是不断取中间位置的值(简称中间值)和目标值v比较如果中间值大于v那么v肯定在中间值的左区间那就更新右边界继续取中间值进行比较如果中间值小于v那么v肯定在中间值的右区间那就更新左边界继续取中间值进行比较然后一直如此循环直到找到目标值(目标值存在的前提下)那么为什么要二分呢?先举个例子:在一组有序数列234567892334455667中找到56的位置朴素做法:从第一个依次向后枚举判断是否为目标值那么我们需要查询12次二分大

【学习笔记】二分

你觉得一个算法难,是因为你的大脑对未知世界的恐惧。——yxc简单讲讲二分二分是什么?顾名思义:就是一分为二(✓)它是一种在有序数组中查找某一特定元素的搜索算法怎么搜索呢?其实就是不断取中间位置的值(简称中间值)和目标值v比较如果中间值大于v那么v肯定在中间值的左区间那就更新右边界继续取中间值进行比较如果中间值小于v那么v肯定在中间值的右区间那就更新左边界继续取中间值进行比较然后一直如此循环直到找到目标值(目标值存在的前提下)那么为什么要二分呢?先举个例子:在一组有序数列234567892334455667中找到56的位置朴素做法:从第一个依次向后枚举判断是否为目标值那么我们需要查询12次二分大

力扣35题搜索插入位置Q35SearchInsertPosition

Q35SearchInsertPosition题目描述给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。请必须使用时间复杂度为O(logn)的算法。示例1:输入:nums=[1,3,5,6],target=5输出:2示例 2:输入:nums=[1,3,5,6],target=2输出:1示例3:输入:nums=[1,3,5,6],target=7输出:4https://leetcode.cn/problems/search-insert-position解题思路首先考虑暴力解法,但暴力的时间复杂度是O(n)不符合题目要求,像这

力扣35题搜索插入位置Q35SearchInsertPosition

Q35SearchInsertPosition题目描述给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。请必须使用时间复杂度为O(logn)的算法。示例1:输入:nums=[1,3,5,6],target=5输出:2示例 2:输入:nums=[1,3,5,6],target=2输出:1示例3:输入:nums=[1,3,5,6],target=7输出:4https://leetcode.cn/problems/search-insert-position解题思路首先考虑暴力解法,但暴力的时间复杂度是O(n)不符合题目要求,像这

leetcode 69. Sqrt(x) x 的平方根(简单)

一、题目大意https://leetcode.cn/problems/sqrtx标签:查找给你一个非负整数x,计算并返回 x 的算术平方根。由于返回类型是整数,结果只保留整数部分,小数部分将被舍去。注意:不允许使用任何内置指数函数和算符,例如pow(x,0.5)或者x**0.5。示例1:输入:x=4输出:2示例2:输入:x=8输出:2解释:8的算术平方根是2.82842...,由于返回类型是整数,小数部分将被舍去。提示:0二、解题思路两个思路:二分法:sqrt=a/mid,判断sqrt==mid牛顿迭代法:x=(x*x/a)/2,判断x*x>a三、解题方法3.1Java实现-二分法public

leetcode 69. Sqrt(x) x 的平方根(简单)

一、题目大意https://leetcode.cn/problems/sqrtx标签:查找给你一个非负整数x,计算并返回 x 的算术平方根。由于返回类型是整数,结果只保留整数部分,小数部分将被舍去。注意:不允许使用任何内置指数函数和算符,例如pow(x,0.5)或者x**0.5。示例1:输入:x=4输出:2示例2:输入:x=8输出:2解释:8的算术平方根是2.82842...,由于返回类型是整数,小数部分将被舍去。提示:0二、解题思路两个思路:二分法:sqrt=a/mid,判断sqrt==mid牛顿迭代法:x=(x*x/a)/2,判断x*x>a三、解题方法3.1Java实现-二分法public

记录用C#写折半查找算法实现

折半查找算法前言最近要考试了,重新回顾一下之前学的算法,今天是折半查找,它的平均比较次数是Log2n思想给定一个有序数组A[0..n-1],和查找值K,返回K在A中的下标。折半查找需要指定3个指针,left、right、mid,分别是左指针指向下标0,右指针指向元素末尾,mid中间值指向(left+right)/2向下取整。如果A[mid]>K,中间值大于要找的K值,移动right指针,right=mid-1如果A[mid]如果A[mid]==K,则返回mid算法实现publicstaticvoidMain(string[]args){int[]A={1,2,3,6,7,11,23,56};i

二分

1.整数二分用一个性质将区间分为满足性质和不满足性质,答案是二分的边界情况一代码分析intbsearch_1(intl,intr){while(l>1;if(check(mid))r=mid;//如果mid满足性质缩小区间为[l,mid]elsel=mid+1;//如果mid不满足性质缩小区间为[mid+1,r]}returnl;}//最后输出l或r都行,因为二者相等如果[l,r]中没有ans那么返回的是大于ans的第一个数情况二代码分析intbsearch_2(intl,intr){while(l>1;if(check(mid))l=mid;//如果mid满足性质缩小区间为[mid,r]el

记录用C#写折半查找算法实现

折半查找算法前言最近要考试了,重新回顾一下之前学的算法,今天是折半查找,它的平均比较次数是Log2n思想给定一个有序数组A[0..n-1],和查找值K,返回K在A中的下标。折半查找需要指定3个指针,left、right、mid,分别是左指针指向下标0,右指针指向元素末尾,mid中间值指向(left+right)/2向下取整。如果A[mid]>K,中间值大于要找的K值,移动right指针,right=mid-1如果A[mid]如果A[mid]==K,则返回mid算法实现publicstaticvoidMain(string[]args){int[]A={1,2,3,6,7,11,23,56};i

二分

1.整数二分用一个性质将区间分为满足性质和不满足性质,答案是二分的边界情况一代码分析intbsearch_1(intl,intr){while(l>1;if(check(mid))r=mid;//如果mid满足性质缩小区间为[l,mid]elsel=mid+1;//如果mid不满足性质缩小区间为[mid+1,r]}returnl;}//最后输出l或r都行,因为二者相等如果[l,r]中没有ans那么返回的是大于ans的第一个数情况二代码分析intbsearch_2(intl,intr){while(l>1;if(check(mid))l=mid;//如果mid满足性质缩小区间为[mid,r]el