Sorting&Searching 二分法找有空字符串的数组 @CareerCup

用二分法查找数组中的元素 用二分法查找数组中的某个元素,首先数组中的元素必须是有序的,然后查找想要的元素,返回其下标值。 #include <stdio.h> int BinSerach(int arr[],int len,int key) { int low=0; int high=len-1; int mid; while(low<=high) { mid==(low+hi... 阅读详情

要点是找到最近的不是空字符串的位置,然后作为mid,再继续二分


package Sorting_Searching;

/**
 * Given a sorted array of strings which is interspersed with empty strings,
 * write a method to find the location of a given string.
 * 
 * Example: find “ball” in [“at”, “”, “”, “”, “ball”, “”, “”, “car”, “”,“”,
 * “dad”, “”, “”] will return 4
 * 
 * Example: find “ballcar” in [“at”, “”, “”, “”, “”, “ball”, “car”, “”, “”,
 * “dad”, “”, “”] will return -1
 * 
 * 译文:
 * 
 * 给你一个排好序的并且穿插有空字符串的字符串数组,写一个函数找到给定字符串的位置。
 * 
 * 例子:在字符串数组 [“at”, “”, “”, “”, “ball”, “”, “”, “car”, “”,“”, “dad”, “”, “”]
 * 中找到"ball",返回下标4.
 * 
 * 例子:在字符串数组 [“at”, “”, “”, “”, “”, “ball”, “car”, “”, “”, “dad”, “”, “”]
 * 中找到"ballcar",查找失败,返回-1.
 * 
 */
public class S11_5 {

	public static void main(String[] args) {
		String[] stringList = { "apple", "", "", "banana", "", "", "",
				"carrot", "duck", "", "", "eel", "", "flower" };
		System.out.println(search(stringList, "apple"));
	}

	public static int search(String[] strings, String str) {
		if (strings == null || str == null || str.isEmpty()) {
			return -1;
		}
		return searchR(strings, str, 0, strings.length - 1);
	}
	
	public static int searchR(String[] strings, String str, int first, int last) {
		if(first > last){
			return -1;
		}
		
		int mid = (first+last)/2;
		
		// 找到离中心最近的不是空字符串的位置
		if(strings[mid].length() == 0 && mid<=last){
			int left = mid-1;
			int right = mid+1;
			while(true){
				if(left<first && right>last){
					return -1;
				}else if(right<=last && strings[right].length()!=0){
					mid = right;
					break;
				}else if(left>=first && strings[left].length()!=0){
					mid = left;
					break;
				}
				right++;
				left--;
			}
		}
		
		if(str.equals(strings[mid])){
			return mid;
		}else if(strings[mid].compareTo(str) > 0){
			return searchR(strings, str, first, mid-1);
		}else {
			return searchR(strings, str, mid+1, last);
		}
	}
}


GPT-5.6、Qwen 4、Grok 4.5三大AI模型技术对比与开发实践指南 AI编程助手作为提升开发效率的重要工具,其核心原理是基于大语言模型的代码生成与理解能力。通过深度学习技术,这些模型能够理解编程语言的语法结构和逻辑关系,为开发者提供智能代码补全、错误检测和文档生成等功能。在技术价值层面,AI编程助手可以显著减少重复性编码工作,提高代码质量和开发效率。在实际应用场景中,不同模型在特定领域表现出差异化优势:GPT-5.6在通用编程任务上表现稳定,Qwen 4对中文开发环境有深度优化,而Grok 4.5则在代码生成专项任务上表现突出。本文基于实际测试数据,从开发效率提升、技术选型 阅读详情

相关推荐

Python:实现searching in sorted matrix在排序矩阵中搜索算法(附完整源码)

Python:实现searching in sorted matrix在排序矩阵中搜索算法(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 466

[Leetcode][python]Convert Sorted List to Binary Search Tree

题目大意将一个升序链表转为有序二叉树 和上一题的不同仅仅是将数组换成了链表解题思路 首先想到的是将链表存入数组,然后和上一题相同。 网上思路是用快慢指针,慢指针每次走一格,快指针每次走两格 代码转为数组(街上一题)# Definition for singly-linked list. # class ListNode(object): # def __init__(self, x): #

蛮三刀酱 1927

WAVE格式

一.wave格式概述 Wave文件格式是用于多媒体文件存储的Microsoft RIFF(Resource Interchange FileFormat)的一个子集。每一个RIFF文件以一个文件头开始,后面是一系列数据块。Wave文件通常是包含“WAVE”块的RIFF文件。而该“WAVE”块由两个子块组成,称为“fmt”块。“fmt”块用于确定数据格式,并且“data”块包含实际的样本数据,

yejia1280的博客 4389

C语言二分法查找数组

代码不是我滴也算是我滴是久久/九九的,这是久久大一2016年写的..... #include<stdio.h> int fun(int a[],int num,int n) { int left=0; int right=n-1; int mid=(left+right)/2; while (1) { if (num==a[left]) return left; if (num==a...

温和的跳跃 5917

间充质干细胞衰老机制与抗衰老干预策略研究

干细胞技术在再生医学领域具有广阔应用前景,其中间充质干细胞(MSCs)因其多向分化潜能和免疫调节特性备受关注。细胞衰老是影响干细胞治疗效果的共性难题,表现为增殖能力下降、端粒缩短等特征。通过表观遗传学分析发现,衰老MSCs存在DNA甲基化异常和组蛋白修饰改变;线粒体功能障碍导致ATP产量锐减,ROS累积显著增加。针对这些机制,研究者开发了包括小分子化合物筛选、CRISPR基因编辑和三维培养优化在内的多种干预策略。这些技术在组织修复、抗衰老治疗等应用场景中展现出重要价值,例如可提升心肌梗死修复效率2.3倍,缩

weixin_33502772的博客 227

2025年MathorCup数学应用挑战赛【B题完整论文】附参考代码(免费分享)

摘。

RS_handy的博客 2694

c# sortedlist_我如何发现C#SortedList使用二进制搜索以及为什么要关心

c# sortedlistby Rina Artstain 通过丽娜·阿斯特斯坦 我如何发现C#SortedList使用二进制搜索以及为什么要关心 (How I Discovered that C# SortedList Uses Binary Search, and Why You Should Care) There is an age old debate: can programmer...

242

无人驾驶感知融合——横摆角速度的多源估计算法解析

本文深入解析了无人驾驶感知融合中的横摆角速度多源估计算法,详细介绍了轮速差法、侧向加速度法、曲率法和惯性传感器直读法四种计算方法及其优缺点。通过卡尔曼滤波实战案例,展示了多源融合算法在提升精度和稳定性方面的显著优势,并探讨了工程实践中的时间对齐、坐标系统一等关键问题。

weixin_31458015的博客 461

找出字符串

题目描述 有一个排过序的字符串数组,但是其中有插入了一些空字符串,请设计一个算法,找出给定字符串的位置。算法的查找部分的复杂度应该为log级别。 给定一个string数组str,同时给定数组大小n和需要查找的stringx,请返回该串的位置(位置从零开始)。 测试样例: ["a","b","","c","","d"],6,"c" 返回:3 变形的二分查找,重新设定了mid...

lMonster81 347

别再死记公式了!用HFSS/CST手把手教你仿真一个2.4GHz WiFi的PIFA天线(附参数调试技巧)

本文详细介绍了使用HFSS和CST仿真软件设计2.4GHz WiFi PIFA天线的全流程,包括建模准备、分步操作指南和参数调试技巧。通过可视化结果和实战案例,帮助工程师快速掌握天线设计的关键参数优化方法,提升辐射性能和工作效率。

weixin_31682031的博客 331

Dify 第 19 篇 手把手教你开发 Dify 插件:从零实现一个时间工具

本文介绍了Dify平台的插件开发机制和流程。Dify支持多种插件类型,包括模型、工具、数据源等,可通过CLI工具快速开发插件。文章详细讲解了如何安装Dify CLI工具,并演示了从零开发一个获取系统时间插件的完整过程,包括项目初始化、文件解读和打包部署。通过该教程,开发者可以快速掌握Dify插件开发的核心要点,实现自定义功能扩展。

甘蓝的专栏 2445

Sorting&Searching 基于变位词的字符串数组排序 @CareerCup

两种排序结果不一样。。。 1 实现Comparator接口的compare方法,在里面先把每个string都排序一遍,然后再比较 2 用一个Hashtable>的结构,String为排序后的确定的string,LL里面装着各种anagram的变种 package Sorting_Searching; import java.util.Arrays; import java.util

2132

uniapp(微信小程序) - 实现uniapp小程序电子签名板,横屏手写姓名签名专用写字画板,客户专用签字板,手写签名签字画板组件,手写签名,(详细运行示例,一键复制开箱即用)

uniapp实现微信小程序的电子签名效果,uniapp微信小程序 电子签名 写字板,用uniapp实现微信小程序的电子签名,uniapp微信小程序canvans实现手写签名,记录一个uniapp写的小程序的手写板,横屏,用于签名,unniapp实现电子签名,uniapp怎么做横屏的手写签名,uniapp如何实现签字板,uniapp小程序平台下怎么做电子签名板组件,uniapp电子签名插件,uniapp最好用的电子写字板插件组件源码,实现uniapp 手写签名功能,手写板、签字板,uni-app插件市场最好的

✅ 精选推荐文章 1万+

Searching and Sorting - qsort

前言在逆向cm时, 看到人家排序用到了qsort. 从来没用过…, 做个试验.记录// test1958.cpp : Defines the entry point for the console application. // Searching and Sorting - qsort#include "stdafx.h" #include <windows.h>/* QSORT.C: Th

博客标题不能为空 612

14、X射线图像处理与特征提取全解析

本文全面解析了X射线图像处理与特征提取的关键技术,涵盖图像预处理、滤波、边缘检测、分割与恢复等流程,并深入探讨了几何特征(如面积、周长、圆度、椭圆拟合)、强度特征(均值、方差、对比度)、傅里叶描述符、不变矩(Hu矩、Gupta矩)以及局部描述符(SIFT、SURF)和稀疏表示方法。同时介绍了特征选择的过滤法、包装法和嵌入法,并结合Matlab代码示例展示了各类特征的实际提取过程。文章最后总结了当前技术的应用现状,并展望了深度学习在X射线图像分析中的未来潜力。

pz89012345的博客 133

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

convert-sorted-list-to-binary-search-tree

题目描述 Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST. 思路:通过快慢指针找到中间结点,将中间结点插入到二叉搜索树中,然后从中间将有序单链表拆成两部分,前半部分递归为左子树,后半部分递归为右子树。 /** * Def...

fistraiser的博客 190

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Hard 单词变型成另一个单词 @CareerCup

对起始单词的每一个字母都做替换,把替换后的单词加入到queue中,并同时维护一个Map来记录变化前单词和变化后单词的联系。用来回溯时能打印出路径。 package Hard; import java.util.HashSet; import java.util.LinkedList; import java.util.Map; import java.util.Queue; impor

4761

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Hard 找到由其它单词组成的最长单词 @CareerCup

用DFS的那个模板就能做出来,值得注意的是一个词必须被除自己外的其他词组成才行,不能是自己组成自己。 package Hard; import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; import java.util.HashMap; import CtCILibrary.A

3649

Tree_Graph 判断T2是否为T1的子树 @CareerCup

原文: You have two very large binary trees: T1, with millions of nodes, and T2, with hundreds of nodes. Create an algorithm to decide if T2 is a subtree of T1 译文: 有两棵很大的二叉树:T1有上百万个结点,T2有上百个结点。写

3486

Stack_Queue 把栈排序 Sort a stack @CareerCup

原文: Write a program to sort a stack in ascending order. You should not make any assumptions about how the stack is implemented. The following are the only functions that should be used to write thi

3231

Stack_Queue 猫狗队列问题 Cat dog queue @CareerCup

An animal shelter holds only dogs and cats, and operates ona strictly “first in, first out” basis. People must adopt either the “oldest”(based on arrival time) of all animals at the shelter, or they

3092

Recursion 字符串的全排列 String Permutation @CareerCup

字符串全排列的题目,还是套用模板,同样要注意ret的size问题会变化。而且与上一题不同的是不光是要在ret后面添加进新的组合,而且还要移除前面用过的组合。类似一个队列。 另外Java的substring中区间闭合情况是左闭右开 [ ) 所以想把一个字符串拆成两个区间就可以用这一句: for(int j=0; j<=tmp.length(); j++){ // substring

2977

Moderate 判断井字游戏的胜利 @CareerCup

基于要查找的次数来决定是否要预处理。预处理方式按照3进制来做。 另外,检查是否赢了要判断横行,纵列,正反对角线 package Moderate; /** * Design an algorithm to figure out if someone has won in a game of tic-tac-toe. 译文: 设计算法检查某人是否赢得了井字游戏。 *

2970

LinkLists 检查一个链表是否为回文 Check if a linked list is palindrome @CareerCup

Implement a function to check a linked list is a palindrome 检查一个链表是否为回文 思路: 1 Iterative,利用栈,把链表前半段存入栈,再逐个弹栈和链表后半段比较。注意链表长度为奇数的情况!要跳过中间节点! 2 递归! 定义递归函数为 Result rec(LinkedListNode head, int l

2921

Tree_Graph LCA(Lowest Common Ancestor) 最低公共节点 (BST或者一般树) @CareerCup

原文: Design an algorithm and write code to find the first common ancestor of two nodes in a binary tree. Avoid storing additional nodes in a data structure. NOTE: This is not necessarily a binary se

2627

Sorting_Searching 叠罗汉 @CareerCup

类似前面的一道堆箱子 普适的解法是回溯,注意这类是求最值的回溯题。 另一种解法是LIS,先把其中一维排序,然后对剩下的一维进行LIS package Sorting_Searching; import java.util.ArrayList; import java.util.Collections; /** * A circus is designing a tower r

2461
上一篇: Sorting&Searching 旋转数组二分法查找 @CareerCup
下一篇: Sorting_Searching 有序矩阵中查找数 @CareerCup
chiiis
博客等级 码龄14年 422粉丝 429原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值