5.9 在有序但含有空的数组中查找字符串

题目】:

  给定一个字符串数组strs[],在strs中有些位置为null,但在不为null的位置上,其字符串是按照字典顺序由小到大依次出现。再给定一个字符串str,请返回str在strs中出现的最左的位置

  举例:

    strs=[null, "a", null, "a", null, "b", null, "c"], str="a",返回1

    strs=[null, "a", null, "a", null, "b", null, "c"],str=null,只要str为null,就返回-1

    strs=[null, "a", null, "a", null, "b", null, "c"],str="d",返回-1

题目及思路来源:左程云老师《程序员代码面试指南》

原文地址:https://www.cnblogs.com/latup/p/10147934.html

时间: 2024-08-01 09:32:55

5.9 在有序但含有空的数组中查找字符串的相关文章

输入一个有序数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字

输入一个有序数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字.如果有多对数字的和等于输入的数字,输出任意一对即可.例如输入数组1.2.4.7.11.15和数字15.由于4+11=15,因此输出4和11. 1 #include<stdio.h> 2 #include<stdlib.h> 3 4 void findTwo(int *array, int len, int sum) 5 { 6 int beg = 0; 7 int end = len-1; 8 int

(算法)旋转有序数组中查找某个数

题目: 假设有个有序数组在某个位置旋转,得到新的数组,即为旋转有序数组.如:(i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2). 现给定一个这样的数组,在数组中查找某个数.如果找到,返回下标,否则返回-1: 思路: 思路1: 考虑一个旋转有序数组的特点:前面部分是递增的,后面部分也是递增的,即先后两部分都为递增有序数组,因此可以用二分查找来做. 假设数组为A,下标从left到right,查找的数字为target,那么mid=(left+((right

写代码可以在整型有序数组中查找想要的数字

思路:对数组中的数字进行查找并与目标数字进行比较,一样则可以找到,不一样则没有. 方法一:在有序的数组中查找一个数字,可以用一个循环的方式将每一个数字依次查找然后挑出所求数字. 1 #include<stdio.h> 2 #define _CRT_SECURE_NO_WARNINGS 3 4 int Find_num(int a[], int size, int num) 5 { 6 for (int i = 0;i < size; i++) 7 { 8 if (a[i] == num)

C语言编程 在整型有序数组中查找想要的数字并且返回下标

遇到"有序"数组中查找元素类的题,优先考虑折半查找(二分查找) 做法核心是利用所定义的下标left和right与mid(由计算得来)下标的比较来逐渐缩短查找范围,达到一个阈值后即为找到. 源代码如下: #include<stdio.h> #include<stdlib.h> int search(int a[], int x, int left, int right)//定义二分查找函数 { while (left <= right) { int mid

数组问题 1.行列有序二维数组中查找2.在一组数成对出现的数中有两个数只出现一次3.在移位数组中查找一个数

一.在一个二维数组中,每一行都按从左到右递增的顺序排序,每一列都按从上到下的递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 思路: 首先选取数组中右上角的数字.如果该数字等于要查找的的数字,查找过程结束:如果该数字大于要查找的数字,剔除这个数字所在的列:如果该数字小于要查找的数字,剔除这个数字所在的行.也就是说如果要查找的数字不在数组的右上角,则每一次都在数组的查找范围剔除一行或一列,这样每一步都可以缩小查找的范围. 实现过程如下: 运行结果如下:

求旋转有序数组的最小值和在旋转数组中查找

#include<iostream> using namespace std; int find2(int A[],int n) { int high=n-1; int low =0; int mid; while(A[high]<=A[low]) { if(high-low==1) { mid=high; break; } mid=low+(high-low)/2; if(A[mid]>=A[low]) { low=mid; }else if(A[mid]<=A[high]

二分查找思想寻找有序数组中查找最小值

思想:循环有序数组最大的特点是利用二分查找时,有一边总是有序的,利用这个特点,利用value存储历史最小值 当左边有序,则用A[low]与value比较即可得出当前左边的最小值,然后跳转到右边看是否存在更小的: 如果右边有序,则用A[mid]与value比较,得出右边的最小值,然后跳转到左边查看是否有更小的. 算法复杂度为O(logn) 代码如下: #include<iostream> #include<stdio.h> #include<assert.h> using

两个有序数组中查找第K大数

题目:两个数组A.B,长度分别为m.n,即A(m).B(n),分别是递增数组.求第K大的数字. 方法一: 简单的办法,使用Merge Sort,首先将两个数组合并,然后在枚举查找.这个算法的时间复杂度是O(m+n).空间复杂度也是O(M+n). 这个方法其实没有考虑到有第K大数为两个相同数字的情况. 方法二: 这里需要两个前提条件, 1.如果K是中位数,则(M+n)是奇数还是偶数是有关系的.如果是奇数,那么中位数唯一,如果是偶数就有两个中位数,可以随便取一个. 2.如果找到的第K大数是x,假如在

折半查找------在一个升序的有序数组中查找某个具体的数字

非递归法: #include <stdio.h> #include <stdlib.h> #define number 6  int binsearch(int x, int *arr, int left, int right); int main() { int x = 0, inter = 0; int arr[number] = { 1, 5, 12, 36, 45, 98 }; /* * printf("请输入可查找到的数:> "); * for