9.16(33.(数组)搜索旋转排序数组 17.(字符串)电话号码的字母组合)

本文主要是介绍9.16(33.(数组)搜索旋转排序数组 17.(字符串)电话号码的字母组合),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

33.(数组)搜索旋转排序数组

思路:

1.时间复杂度是(logn),所以我想到了二分查找,但是本题和二分查找还有些不同,二分查找要求整体有序,target和nums[mid]比较以便确定下一步是向左还是向右。因此本体的关键是如何确定向左还是向右。

2.以nums = [4, 5, 6, 7, 0, 1, 2]为例,假如target是0,mid指向7,i指向4,j指向2。target<nums[mid],但是不能向左转。此时的限定条件是target>nums[i]&&target<nums[mid],其他几种情况也是类似。总之判断左转还是右转的条件不再是简单的target和nums[mid]之间的判断。

程序代码如下:

//二分查找的变形,只需在判断条件上是稍微更改即可

class Solution
{
public:int search(vector<int>& nums, int target) {int i = 0, j = nums.size() - 1;//分别表示起始时的坐标if (nums.size() == 1) {if (nums[0] == target) return 0;else return -1;}while (i<j) {int mid = (i + j) / 2;if (target == nums[mid]) return mid;else if (target == nums[i]) return i;else if (target == nums[j]) return j;if (nums[mid] <= nums[j] && nums[mid] <=nums[i]) {//mid处的元素是大的部分,如示例的4、5、6、7if (target<nums[mid] || target>nums[i])j = mid - 1;else if (target<nums[i] && target>nums[mid])i = mid + 1;else return -1;}else if(nums[mid]>=nums[i]&&nums[mid]>=nums[j]){//mid处的元素是小的部分,如示例的0、1、2if (target > nums[i] && target < nums[mid])j = mid - 1;else if (target > nums[mid] || target < nums[j])i = mid + 1;else return -1;}else if (nums[mid] <=nums[j] && nums[mid]>=nums[i]) {//这种情况表示没有进行旋转就是普通的二分查找if (target<nums[mid] && target>nums[i])j = mid - 1;else if (target<nums[j] && target>nums[mid])i = mid + 1;else return -1;}}return -1;}
};

17.(字符串)电话号码的字母组合

思路:分治+递归(我也不清楚这具体算是什么算法)。降低问题规模比如239可以分解成2和39的各种组合,39可以分解成3和9的的组合,递归基就是单个数字的情况。

程序代码如下:
class Solution {
public:string a[10] = {"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};//前两个为空便于后面的i直接使用vector<string> letterCombinations(string digits) {if (digits=="") {vector<string> arr(0);//这个能继续向里面push元素吗?cout<<""<<endl;return arr;//还必须得返回,那就返回空的吧}else if (digits.size() == 1) {int  i = digits[0]-'0';//只有一个元素,该元素的数值是ivector<string> arr(a[i].size());for (int t = 0; t < a[i].size(); t++) {arr[t] = a[i][t];}return arr;}else {int  i = digits[0]-'0';//表示第一个元素数值digits.erase(digits.begin());//除去开头的元素int len1 = a[i].size();//a[i]表示一个字符串int len2 = letterCombinations(digits).size();vector<string> result(len1*len2);//创建新的向量存放元素int m = 0;//表示新向量的坐标for (int j = 0; j < len1; j++) {for (int k = 0; k < len2; k++) {result[m++] = a[i][j] + letterCombinations(digits)[k];}}return result;}}
};

这篇关于9.16(33.(数组)搜索旋转排序数组 17.(字符串)电话号码的字母组合)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/860175

相关文章

Java实现将HTML文件与字符串转换为图片

《Java实现将HTML文件与字符串转换为图片》在Java开发中,我们经常会遇到将HTML内容转换为图片的需求,本文小编就来和大家详细讲讲如何使用FreeSpire.DocforJava库来实现这一功... 目录前言核心实现:html 转图片完整代码场景 1:转换本地 HTML 文件为图片场景 2:转换 H

JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法

《JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法》:本文主要介绍JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法,每种方法结合实例代码给大家介绍的非常... 目录引言:为什么"相等"判断如此重要?方法1:使用some()+includes()(适合小数组)方法2

Java使用正则提取字符串中的内容的详细步骤

《Java使用正则提取字符串中的内容的详细步骤》:本文主要介绍Java中使用正则表达式提取字符串内容的方法,通过Pattern和Matcher类实现,涵盖编译正则、查找匹配、分组捕获、数字与邮箱提... 目录1. 基础流程2. 关键方法说明3. 常见场景示例场景1:提取所有数字场景2:提取邮箱地址4. 高级

Python 字符串裁切与提取全面且实用的解决方案

《Python字符串裁切与提取全面且实用的解决方案》本文梳理了Python字符串处理方法,涵盖基础切片、split/partition分割、正则匹配及结构化数据解析(如BeautifulSoup、j... 目录python 字符串裁切与提取的完整指南 基础切片方法1. 使用切片操作符[start:end]2

MyBatis的xml中字符串类型判空与非字符串类型判空处理方式(最新整理)

《MyBatis的xml中字符串类型判空与非字符串类型判空处理方式(最新整理)》本文给大家介绍MyBatis的xml中字符串类型判空与非字符串类型判空处理方式,本文给大家介绍的非常详细,对大家的学习或... 目录完整 Hutool 写法版本对比优化为什么status变成Long?为什么 price 没事?怎

C++归并排序代码实现示例代码

《C++归并排序代码实现示例代码》归并排序将待排序数组分成两个子数组,分别对这两个子数组进行排序,然后将排序好的子数组合并,得到排序后的数组,:本文主要介绍C++归并排序代码实现的相关资料,需要的... 目录1 算法核心思想2 代码实现3 算法时间复杂度1 算法核心思想归并排序是一种高效的排序方式,需要用

Java中数组与栈和堆之间的关系说明

《Java中数组与栈和堆之间的关系说明》文章讲解了Java数组的初始化方式、内存存储机制、引用传递特性及遍历、排序、拷贝技巧,强调引用数据类型方法调用时形参可能修改实参,但需注意引用指向单一对象的特性... 目录Java中数组与栈和堆的关系遍历数组接下来是一些编程小技巧总结Java中数组与栈和堆的关系关于

MySQL常用字符串函数示例和场景介绍

《MySQL常用字符串函数示例和场景介绍》MySQL提供了丰富的字符串函数帮助我们高效地对字符串进行处理、转换和分析,本文我将全面且深入地介绍MySQL常用的字符串函数,并结合具体示例和场景,帮你熟练... 目录一、字符串函数概述1.1 字符串函数的作用1.2 字符串函数分类二、字符串长度与统计函数2.1

C# $字符串插值的使用

《C#$字符串插值的使用》本文介绍了C#中的字符串插值功能,详细介绍了使用$符号的实现方式,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录$ 字符使用方式创建内插字符串包含不同的数据类型控制内插表达式的格式控制内插表达式的对齐方式内插表达式中使用转义序列内插表达式中使用

详解MySQL中JSON数据类型用法及与传统JSON字符串对比

《详解MySQL中JSON数据类型用法及与传统JSON字符串对比》MySQL从5.7版本开始引入了JSON数据类型,专门用于存储JSON格式的数据,本文将为大家简单介绍一下MySQL中JSON数据类型... 目录前言基本用法jsON数据类型 vs 传统JSON字符串1. 存储方式2. 查询方式对比3. 索引