首页 > 其他分享 >二分法查+范围内临近值查找

二分法查+范围内临近值查找

时间:2024-08-30 09:37:56浏览次数:4  
标签:arr target uint8 临近 二分法 length uint16 position 查找

      

 1 uint16 FindPosition(uint8 arr[], uint16 length, uint8 target)
 2 {
 3     uint16 low = 0;
 4     uint16 high = length - 1;
 5     uint16 closest_position = 0xFFFF;
 6 
 7     if (target < arr[0] || target > arr[length - 1])
 8     {
 9         return 0xFFFF;  // target不在数组范围内
10     }
11 
12     while (low <= high)
13     {
14         uint16 mid = low + (high - low) / 2;
15 
16         if (arr[mid] == target)
17         {
18             return mid;
19         }
20         else if (arr[mid] < target)
21         {
22             closest_position = mid;  // 更新最接近且小于target的位置
23             low = mid + 1;
24         }
25         else
26         {
27             high = mid - 1;
28         }
29     }
30     
31     return closest_position;  // 返回最接近且小于target的位置
32 }

 

 1 int main(int argc, char *argv[])
 2 {
 3     uint8 arr[] = {1, 3, 5, 7, 10, 11, 13,17, 20, 23, 29,32,40,49};
 4     uint16 length = sizeof(arr) / sizeof(arr[0]);
 5     uint8 target = 14;
 6 
 7     uint16 position = FindPosition(arr, length, target);
 8 
 9     if (position != 0xFFFF)
10     {
11         printf("Closest position less than target found at position: %d\n", position);
12     }
13     else
14     {
15         printf("Target not in range\n");  //result:6
16     }
17     //system("pause");
18     return 0;
19 }

 

标签:arr,target,uint8,临近,二分法,length,uint16,position,查找
From: https://www.cnblogs.com/xiaokangkp0602/p/18388022

相关文章

  • 字典查找对应输入的字符
    一、将文件放入到数据库#include<stdio.h>#include<sqlite3.h>#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>#include<string.h>#include<unistd.h>intmain(intagrc,char*agrv[]){FILE*fp;fp=fo......
  • 代码随想录算法训练营,29日 | 704. 二分查找,27. 移除元素,977.有序数组的平方,209.长度最
    数组基础文档讲解︰代码随想录(programmercarl.com)1.连续空间、相同类型元素2.元素只能覆盖3.二维数组的地址连续吗(C++连续,Java不连续)704.二分查找题目链接:704.二分查找文档讲解︰代码随想录(programmercarl.com)视频讲解︰二分查找日期:2024-08-29思路:第一反应是想到二分查......
  • 【C++二分查找】2271. 毯子覆盖的最多白色砖块数
    本文涉及的基础知识点C++二分查找LeetCode2271.毯子覆盖的最多白色砖块数给你一个二维整数数组tiles,其中tiles[i]=[li,ri],表示所有在li<=j<=ri之间的每个瓷砖位置j都被涂成了白色。同时给你一个整数carpetLen,表示可以放在任何位置的一块毯子的长度......
  • 【408DS算法题】028基础-查找二叉树的最大值结点
    Index题目分析实现总结题目给定二叉树的根节点,找到二叉树中结点值最大的结点。分析实现对于查找二叉树中的最大值结点,在二叉树的遍历(DFS、层次遍历)的基础上进行修改可以轻松地达成这一目的。本文中选用的是相对直观的后序遍历,具体实现如下:BTNode*findMax(BTN......
  • Java中的数组用法(复制、替换、查找与排序)
    在Java编程中,数组是一种基础且强大的数据结构,用于存储一组相同类型的元素。本文将深入探讨数组在Java中的用法,并展示如何进行数组的复制与替换、查找以及排序。(这些了解与学习只需要一个IDEA就可以进行练习了 )##数组的声明与初始化在Java中,数组的声明和初始化非常直观。以......
  • 代码随想录算法训练营第一天 | 数组part01:数组理论基础,704. 二分查找,27. 移除元素 97
    数组理论基础数组是存放在连续内存空间上的相同类型数据的集合数组徐璈注意的是:数组的下标都是从0开始的数组内存空间是的地址是连续的正因为舒适的内存空间是连续的,所以在删除和增添元素的时候,需要移动其他元素的地址。在c++中,vector的底层实现是array,严格来说,vector是容......
  • 1894. 二分查找左侧边界
     代码#include<bits/stdc++.h>usingnamespacestd;inta[110000],n,q;intzc(intx){ intl=1,r=n,mid; while(l<=r) { mid=(l+r)/2; if(x<a[mid])r=mid-1; elseif(x>a[mid])l=mid+1; elseif(x==a[mid])r=mid-1; } if(a[l]==x)return......
  • 二分查找
    1.基础版publicintsearch(int[]nums,inttarget){inti=0,j=nums.length-1;while(i<=j){intmiddle=(i+j)>>>1;if(target<nums[middle]){j=middle-1;......
  • 二分查找算法:朴素二分+左右边界二分&力扣实战应用
    目录:1、二分查找算法简介2、算法原理及时间复杂度分析2.1朴素二分算法3.2查找左右边界的二分算法3.2.1查找左边界3.2.2查找右边界3.3时间复杂度分析3、二分查找算法模版3.1朴素二分模版3.2查找左右边界的二分模版4、算法应用【leetcode】4.1题一:搜素插入位......
  • ArrayList遍历, 元素查找
    1,ArrayList集合的遍历与数组类似,都可以使用foreach语句string[]str1={"a","b","c","d","e","f"};ArrayListList=newArrayList(str1);foreach(variteminList)......