26.【算法五章-----02】

简介: 26.【算法五章-----02】

(一)、在元素中查找第一个和最后一个

给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。

如果数组中不存在目标值 target,返回 [-1, -1]。

你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。

示例 1:

输入:nums = [5,7,7,8,8,10], target = 8 输出:[3,4]

示例 2:

输入:nums = [5,7,7,8,8,10], target = 6 输出:[-1,-1]

示例 3:

输入:nums = [], target = 0 输出:[-1,-1]

提示:

0 <= nums.length <= 105

-109 <= nums[i] <= 109

nums 是一个非递减数组

-109 <= target <= 109

通过次数618,661提交次数1,462,201

来源:力扣(LeetCode)

链接:https://leetcode.cn/problems/find-first-and-last-position-of-element-in-sorted-array

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

代码展示:

#include <iostream>
#include <stdlib.h>
#include <string.h>
using namespace std;
int main()
{
  int n,a[10];
  cin >> n;
  for (int i = 0; i < n; i++)
  {
    cin >> a[i];
  }
  int target, m = 0;
  cin >> target;
  cout << "[";
  for (int i = 0; i < n; i++)
  {
    if (a[i] == target)
    {
      cout << i << ",";
      ++m;
    }
  }
  cout << "]";
  if (m == 0)
  {
    system("cls");     //清除用的
    cout << "[-1,-1]" << endl;
  }
}

(二)、旋转数组求下标

整数数组 nums 按升序排列,数组中的值 互不相同 。

在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k+1], …, nums[n-1], nums[0], nums[1], …, nums[k-1]](下标 从 0 开始 计数)。例如, [0,1,2,4,5,6,7] 在下标 3 处经旋转后可能变为 [4,5,6,7,0,1,2] 。

给你 旋转后 的数组 nums 和一个整数 target ,如果 nums 中存在这个目标值 target ,则返回它的下标,否则返回 -1

你必须设计一个时间复杂度为 O(log n) 的算法解决此问题。

示例 1:

输入:nums = [4,5,6,7,0,1,2], target = 0 输出:4

示例 2:

输入:nums = [4,5,6,7,0,1,2], target = 3 输出:-1

示例 3:

输入:nums = [1], target = 0 输出:-1

代码展示:

#include <iostream>
using namespace std;
int main()
{
  cout << "请输入您旋转后的数组的个数为:" << endl;
  int n,a[10];
  cin >> n;
  for (int i = 0; i < n; i++)
  {
    cin >> a[i];
  }
  cout << "请输入您的目标值为:" << endl;
  int target,m=0;
  cin >> target;
  for (int i = 0; i < n; i++)
  {
    if (a[i] == target)
    {
      m++;
      cout << i << endl;
    }
  }
  if (m == 0)
  {
    cout << -1 << endl;
  }
}

(三)、搜索二维矩阵

编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:

每行中的整数从左到右按升序排列。 每行的第一个整数大于前一行的最后一个整数。

示例 1:

输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 3

输出:true

示例 2:

输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 13

输出:false

提示:

m == matrix.length

n == matrix[i].length

1 <= m, n <= 100

-104 <= matrix[i][j], target <= 104

代码展示:

#include <iostream>
using namespace std;
int main()
{
  int m, n, a[10][10];
  cout << "请输入这是一个m*n的矩阵" << endl;
  cin >> m >> n;
  for (int i = 0; i < m; i++)
  {
    for (int j = 0; j < n; j++)
    {
      cout << "第" << i << "行" << j << "个元素为:" << endl;
      cin >> a[i][j];
    }
  }
  cout << "请输入目标值为:" << endl;
  int target,s=0;
  cin >> target;
  for (int i = 0; i < m; i++)
  {
    for (int j = 0; j < n; j++)
    {
      if (a[i][j] == target)
      {
        s++;
      }
      }
    }
  if (s == 0)cout << false << endl;
  else cout << true << endl;
}

(四)、求最大值(和坐标)

问题描述:给您一个整型数组,请您判断在这个整型数组中最大值为多少且输出坐标.

#include <iostream>
using namespace std;
int main()
{
 int a[] = { 9,8,7 };
 int max = a[0];
 int sum = 0;
 int i;
 for ( i = 0; i <3; i++)
 {
  if (max >= a[i])
  {
  }
  else
  {
   max = a[i];
   sum =i;
  }
 }
 cout << "最大值为:" << max << "下表为:" << sum<< endl;
}

(五)、【计算一个字符串和另一个字符串相等的次数】

问题描述:输入两个字符串 ,然后判断A字符串包含B字符串的几倍,如果没有就输出0,有的话就请您输出几倍?

#include <iostream>
#include <string.h>
using namespace std;
int main()
{
 int m = 0;
 string s1;
 cout <<"请输入第一个字符串的内容:" << endl;
 cin >> s1;
 cout << "请输入第二个字符串的内容:" << endl;
 string s2;
 cin >> s2;
 if (s1.length() < s2.length())
 {
  cout << "没有一个是相等的!" << endl;
 }
 else
 {
  for (int i = 0; i < s1.length(); i++)
  {
   for (int j = 0; j < s2.length(); j++)
   {
    if (s1[i + j] != s2[j])
    {
     break;
    }
    else{
     if (j == s2.length()-1)
     {
      m++;
      i += j;
     i--;
     }} }}
  cout << "有" << m << "个" << endl;
 }
 return 0;
}


相关文章
|
机器学习/深度学习 存储 算法
算法---------空间复杂度
算法---------空间复杂度
|
6月前
|
搜索推荐
排序算法----快速排序----详解&&代码
排序算法----快速排序----详解&&代码
|
7月前
|
算法 Java
算法-----全排列
算法-----全排列
|
算法 C++
22.【算法五章-----01】
22.【算法五章-----01】
46 0
|
机器学习/深度学习 存储 算法
算法------时间复杂度
算法------时间复杂度
|
机器学习/深度学习 存储 算法
数算部分-----第一节----算法的时空复杂度
数据结构,Data Structure, 指的就是计算机存储、组织数据的一种方式。并且可以理解为,这些数据的元素间有着特定关系。而这些数据包含其特定关系的集合,就叫数据结构。
148 0
数算部分-----第一节----算法的时空复杂度
|
弹性计算 Linux 云计算
初识-----深入了解
我是物联网工程专业的一次课程安排让我喜欢喜欢上了Linux
149 0