数组基操三连(1)

题目:

    给定一个数组arr,求出需要排序的最短子数组长度

要求:

    时间o(n),空间o(1)

思路:

    有序的数组中,任意一个数字,一定小于左边的数大于右边的数。

    我们找到的需要排序的子数组,显然是比右边最小的值大,或比左边最大的值小。

    我们初始化变量noMinindex=-1;从右往左遍历,记录经过的最小值为min,若当前数大于min,说明,如果要有序,min一定要放      在当前数左边,我们更新noMinindex。

    也就是说,我们的noMinindex是负责记录最左边出现这种情况的位置。我们反方向处理出noMaxindex

    他们组成的区间就是最短需要排序的部分了

public class MinLengthForSort {public static int getMinLength(int[] arr) {if (arr == null || arr.length < 2) {return 0;}int min = arr[arr.length - 1];int noMinIndex = -1;for (int i = arr.length - 2; i != -1; i--) {if (arr[i] > min) {noMinIndex = i;} else {min = Math.min(min, arr[i]);}}if (noMinIndex == -1) {return 0;}int max = arr[0];int noMaxIndex = -1;for (int i = 1; i != arr.length; i++) {if (arr[i] < max) {noMaxIndex = i;} else {max = Math.max(max, arr[i]);}}return noMaxIndex - noMinIndex + 1;}public static void main(String[] args) {int[] arr = { 1, 2, 4, 7, 10, 11, 7, 12, 6, 7, 16, 18, 19 };System.out.println(getMinLength(arr));}}

 

题目:

    给定一个数组,找出出现次数超过一半的数字

蠢思路:排序找中间

思路:

    DP:扫一遍一个变量count记录解出现的次数,是当前解就++,否则--,count为负就换掉当前解。(解释:想象解全都挨在         一起(前面),count先达到最大,然后减为1或0,而其他数字先出现,可能会使正确解的count减为负数,但都会使正确解        在后面更多,从而保证了结束时肯定为正确解)

int main()
{int n;//个数scanf("%d",&n);int temp,k,count=0;while(n--){scanf("%d",&temp);if(temp==k)count++;else{count--;if(count<0){count=0;k=temp;}}}printf("%d\n",k);
}

 

 

题目:

给定一个有N×M的整型矩阵matrix和一个整数K,matrix的每一行和每一列都是排好序的。实现一个函数,判断K是否在matrix中。

例如:

0       1       2       5

2       3       4       7

4       4       4       8

5       7       7       9

如果K为7,返回true,如果K为6,返回false

要求:

时间复杂度为O(N+M),额外空间复杂度为O(1)。

思路:

1.从矩阵最右上角的数开始寻找(row=0,col=M-1)。

2.比较当前数matrix[row][col]与K的关系:

如果与K相等,说明已找到,直接返回true

如果比K大,因为矩阵每一列都已排好序,所以在当前数所在的列中,处于当前数下方的数都会比K大,则没有必要继续在第col列上寻找,令col=col-1,重复步骤2.

如果比K小,因为矩阵每一行都已排好序,所以在当前数所在的行中,处于当前数左方的数都会比K小,则没有必要继续在第row行上寻找,令row=row+1,重复步骤2.

3.如果找到越界都没有发现与K相等的数,则返回false。

或者可以从矩阵的最左下角的数开始寻找(row=N-1,col=0),具体过程类似。

代码:
 

/*** 在行列都排好序的矩阵中找数*/
public class IsContains {public boolean isContains(int[][] matrix, int K) {int row = 0;int col = matrix[0].length - 1;while (row < matrix.length && col > -1) {if (matrix[row][col] == K) {return true;} else if (matrix[row][col] > K) {col--;} else {row++;}}return false;}
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/445395.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IT互联网公司的笔试的输入输出- c++ python

文章目录目录c方式1&#xff1a;方式2&#xff1a;Python方式1&#xff1a;方式2&#xff1a;方式3&#xff1a;目录 c 方式1&#xff1a; 第一种情况&#xff1a;输入n个数&#xff0c;存放在数组中 #include <iostream> #include <vector> using namespace st…

随机过程1

随机过程1概述1.参考书目2.主要内容3.概率论--基本概念回顾3.1对“不确定性”的认识3.2 应对“不确定性”应该怎么做3.3随机变量&#xff08;Random Variable&#xff09;3.4分布函数&#xff08;Distribution Function&#xff09;3.5概率密度&#xff08;Density&#xff09;…

数组基操三连(4)

题目一 给定一个长度为N的整型数组arr&#xff0c;其中有N个互不相等的自然数1~N 请实现arr的排序 但是不要把下标0~N-1位置上的数值通过直接赋值的方式替换成1~N。 要求&#xff1a;时间复杂度为O(N)&#xff0c;额外空间复杂度为O(1)。 思路&#xff1a;从左向右检查&…

Linux(1)-touch,mkdir,rm,mv,cp,ls,cd,cat

Linux1-实用终端命令1. touch, mkdir2. rm, mv, cp3. ls(通配符),cd(绝对/相对路径)4. cat, more/less文件内容浏览文件/目录-增删查改, 文件内容查看.1. touch, mkdir touch新文件 &#xff1a;在当前文件夹下&#xff0c;创建文件。文件不存在则创建新文件&#xff1b;文件存…

java常用类介绍及源码阅读(ArrayList)

java.util 类 ArrayList<E> 继承关系&#xff1a; java.lang.Objectjava.util.AbstractCollection<E>java.util.AbstractList<E>java.util.ArrayList<E>List 接口的动态数组的实现。 实现了所有可选列表操作&#xff0c;并允许包括 null 在内的所有…

tests1

ls,cd,tardone

数组精选题目三连(5)

子数组的最大累加和问题 输入一个整形数组&#xff0c;求数组中连续的子数组使其和最大。比如&#xff0c;数组x 应该返回 x[2..6]的和187. 这四个代码完成的功能都是求最大子数组&#xff08;注意用词准确&#xff0c;子数组连续&#xff0c;子序列可以不连续&#xff09;。…

大数据学习(1)-大数据概述

文章目录目录大数据产生背景大数据概念大数据影响大数据应用大数据关键技术大数据产业大数据&#xff0c;云计算&#xff0c;物联网关系云计算物联网大数据&#xff0c;物联网&#xff0c;云计算三者之间联系目录 大数据产生背景 三次信息化浪潮 根据IBM前首席执行官郭士纳福…

java常用类介绍及源码阅读(LinkedList)

java.util 类 LinkedList<E> java.lang.Objectjava.util.AbstractCollection<E>java.util.AbstractList<E>java.util.AbstractSequentialList<E>java.util.LinkedList<E> List 接口的链接列表实现。实现所有可选的列表操作&#xff0c;并且允…

矩阵论-集合与映射,线性空间及其性质

线性空间与线性变换综述1.1 线性空间1.1.1 集合与映射1.1.2 线性空间及其性质综述 本系列博文主要总结学习矩阵论的心得笔记&#xff0c;参考数目《矩阵论》–张凯院&#xff1b;整个文章的整理体系参照行书过程。 1.1 线性空间 1.1.1 集合与映射 1.集合&#xff1a;将很多…

机器学习知识总结系列-机器学习中的数学-概率与数理统计(1-3-1)

文章目录目录1.概率与统计1.1 机器学习与概率统计之间的关系1.2 重要的统计量1.2.1 期望1.2.2 方差1.2.3 协方差&#xff0c;相关系数协方差相关系数1.2.4 矩1.3 重要的定理与不等式1.4 用样本估计参数目录 1.概率与统计 1.1 机器学习与概率统计之间的关系 1.什么是概率问题…

redis——事件

redis服务器是一个事件驱动程序。 需要处理两类事件&#xff1a; 1&#xff09;文件事件&#xff1a;redis是通过套接字与客户端或者其他服务器连接的&#xff0c;而文件事件就是服务器对套接字操作的抽象。 2&#xff09;时间事件&#xff1a;服务器对一些定时操作的抽象。…

自然语言处理(1)-概述

自然语言处理-概述概述1.基本概念2.人类语言技术HLT发展简史3.HLT 研究内容4.基本问题和主要困难5.基本研究方法概述 本系列文章计划总结整理中国科学院大学宗成庆老师《自然语言处理》课程相关知识&#xff0c;参考数目《统计自然语言处理》-第二版&#xff0c;宗成庆。 1.基…

redis——客户端

redis服务器是典型的一对多服务器&#xff0c;通过使用由IO多路复用技术实现的文件事件处理器&#xff0c;redis服务器使用了单线程单进程的方式来处理请求。 客户端的属性 描述符 客户端状态的 fd 属性记录了客户端正在使用的套接字描述符&#xff1a; typedef struct red…

矩阵论-线性空间的基与坐标,基变换坐标变换

线性空间与线性变换综述1.1 线性空间1.1.3 线性空间的基与坐标1.1.4 基变换与坐标变换综述 本系列博文主要总结学习矩阵论的心得笔记&#xff0c;参考数目《矩阵论》–张凯院&#xff1b;整个文章的整理体系参照行书过程。 1.1 线性空间 1.1.3 线性空间的基与坐标 向量的坐…