查找一个有序数列中的一个数是否存在的方法

lis = [2,4,6,7]
n = 3
lst = [0,0,0,0,0,0,0]   #创建一个元素均为0的列表,元素个数为lis中最大的数字加1
li = [0,0,1,0,1,0,1,1]  #把 lis 中对应的数字值变为1
if li[3] == 1:
    print("存在")
else:
    print("不存在")

主要思想为,新建列表作为索引,如果一个数的索引存在,说明这个数也存在.

这种查找方法主要是为了能够节省时间和空间.

也可以把lst 做成字典,如

lis = [2,4,6,7]
n = 3
dic = {"2":1,"4":1,"6":1,"7":1}
if dic.get("3") == 1:
    print("存在")
else:
    print("不存在")

显而易见的是,字典更占用内存,即空间.



原文地址:https://www.cnblogs.com/cuiyuanzhang/p/9483528.html

时间: 2024-10-09 22:26:00

查找一个有序数列中的一个数是否存在的方法的相关文章

在二维有序数组中搜索某个数(存在否、出现次数)

在二维有序数组中搜索某个数(存在否.出现次数) 问题描述 写出一个高效的算法来搜索m×n矩阵中的值,返回这个值出现的次数. 这个矩阵具有以下特性: 每行中的整数从左到右是排序的. 每一列的整数从上到下是排序的. 在每一行或每一列中没有重复的整数. 样例 考虑下列矩阵: [ [1, 3, 5, 7], [2, 4, 7, 8], [3, 5, 9, 10] ] 给出target = 3,返回 2 实现思路 由于数组每行从左到右是有序的,每列从上到下是有序的,因此可以考虑从二维数组的右上角开始搜索.

LintCode-查找斐波纳契数列中第 N 个数

题目: 查找斐波纳契数列中第 N 个数. 所谓的斐波纳契数列是指: 前2个数是 0 和 1 . 第 i 个数是第 i -1 个数和第 i -2 个数的和. 斐波纳契数列的前10个数字是: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34 ... 注意事项 The Nth fibonacci number won't exceed the max value of signed 32-bit integer in the test cases. 样例 给定 1,返回 0 给定 2,返

c语言经典算法——查找一个整数数组中第二大数

题目: 实现一个函数,查找一个整数数组中第二大数. 算法思想: 设置两个变量max1和max2,用来保存最大数和第二大数,然后将数组剩余的数依次与这两个数比较,如果这个数a比max1大,则先将max1赋给max2,使原先最大的数成为第二大的数,再将这个数a赋给max1,如果这个数a比max1小但比max2大,则将这个数a赋值给max2,依次类推,直到数组中的数都比较完. c语言代码: 1 #include<stdio.h> 2 #include<stdlib.h> 3 #defin

使用二分查找向一个有序数组中插入一个数据

折半查找法找到一个元素在数组中的下标 * @param arr 数组 * @param key 要查找的元素 * @return 找到则返回元素在数组中的下标,如果没找到,则返回这个元素在有序数组中的位置 * 如:[1,4,6,7,10,11,15],查找8在数组中的位置,如果存在则返1,不存在则返回在7这个下标+1的这个位置上, 也就是说在返回10所在位置上的下标 */ public static int arrayIndexOf(int[] array,int key) { int min,

【C语言】输入一个整数,输出该数二进制表示中1的个数(三种方法)

输入一个整数,输出该数二进制表示中1的个数.如输入32,输出1. 代码实现: 方法1:与运算 #define _CRT_SECURE_NO_WARNINGS 1 #include<iostream> using namespace std; int FindOneNumber(unsigned int num) {     int numberofOne = 0;     while (num)     {         num = num & (num - 1);         

一个组数中只有两个数只出现了一次,其他所有数都是成对出现的,找出这两个数

原题:给一组数,只有两个数只出现了一次,其他所有数都是成对出现的.怎么找出这两个数. 编写函数实现. 对于一组数中只有一个数只出现一次,其他所有数都是成对出现的,我们采用了对全部数组元素进行异或,经过分析发现异或全部数组的数所得到的数为整个数组中两个只出现一次数异或的结果先对所有的元素进行异或.可以通过将结果转换为二进制,在移位二进制数中的第一个1,然后根据这个1的判断条件将整个数组分为两组,分别对两个组的元素进行全部异或,则就找出两个不同的数. 例如:数组中的元素为下面这些数: 0000   

输出一个数的二进制序列中1的个数(三种方法)

由于这个数有可能是负数,负数在计算机中以补码的方式存储,要求负数的补码中1的个数依然可以正确输出,方法如下: 1.定义这个数的变量类型为无符号整型(unsigned int) 代码为 include<stdio.h>int count_one_bits(unsigned value){int count=0;while(value){   if(value%2==1)   {count++;   }   value=value/2; }return count;}int main(){unsi

多个有序数列中查找第k小值

问题描述:现有n个有序序列如(2,3,9),(3,5,11,23),(1,4,7,9,15,17,20),(8,15,35,9),(20,30,40),请求出第k小值. 问题分析:可用多路归并排序将所有序列进行排序后取第k个值,但是只要求求出第k小值将所有数组排序未免显得有点浪费,所以我们可以使用包含k个元素的堆完成,对于每组元素取出前k小的,依次进行比较,得到总的前k小 执行步骤: 一.建初堆:从第一组数中取出前k小的元素建初始大根堆(若不足k个则取全部元素), 二. 1 .补充堆:若堆中元素

数组依然有序,求看下程序问题在哪儿?在有序数组中插入一个数

有若干整数按从小到大顺序放在数组中,用户输入一个数插入到此数组中,数组中的数依然按从小到大排列.求大佬看一下这个程序哪里有问题?#include<stdio.h>#include<stdlib.h>void inserer(int *s,int x,int *n){    int i,j=0;    while(j<*n && s[j]<x) j++;    for(i=(*n)-1;i>=j;i--) s[i+1]=s[i];    s[i]=x