博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c++刷题(12/100)无序数组中和为定值的最长子数组
阅读量:5109 次
发布时间:2019-06-13

本文共 2282 字,大约阅读时间需要 7 分钟。

题目一:

最短无序连续子数组

给定一个整数数组,你需要寻找一个连续的子数组,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。

你找到的子数组应是最短的,请输出它的长度。

示例 1:

输入: [2, 6, 4, 8, 10, 9, 15]输出: 5解释: 你只需要对 [6, 4, 8, 10, 9] 进行升序排序,那么整个表都会变为升序排序。

说明 :

  1. 输入的数组长度范围在 [1, 10,000]。
  2. 输入的数组可能包含重复元素 ,所以升序的意思是<=。

思路:一开始就想到从两边往中间找,然而被重复数的情况弄的快自闭了,正确的姿势是,一个循环,在里面更新两边的下标

class Solution {public:    int findUnsortedSubarray(vector
& nums) { int len = nums.size(); int r = nums[0]; int l = nums[len - 1]; int beg = -1; int end = -2; for (int i = 1; i < len; i++) { r = max(r, nums[i]); l = min(l, nums[len - i - 1]); if (r > nums[i]) { end = i; } if (l < nums[len - i - 1]) { beg = len - i - 1; } } return end - beg + 1; }};

 

题目二:和为K的子数组

https://leetcode-cn.com/problems/subarray-sum-equals-k/description/

给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。

示例 1 :

输入:nums = [1,1,1], k = 2输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。

说明 :

  1. 数组的长度为 [1, 20,000]。
  2. 数组中元素的范围是 [-1000, 1000] ,且整数 k 的范围是 [-1e7, 1e7]。

思路:这种子数组和的问题都可以yonghash来做到复杂度o(n),hash表中存储到当前i位置的sum和,如果sum-k存在的话,那么一定有j使得arr[j+1....i]的和为k,这里看了别人的代码我发现map默认初始为0,我还在用if判断。。。

class Solution {public:    int subarraySum(vector
& nums, int k) { int sum = 0, cnt = 0; map
hash; hash[0] = 1; for(auto n:nums) { sum += n; cnt += hash[sum-k]; ++hash[sum]; } return cnt; }};

 

题目三:连续的子数组和

给定一个包含非负数的数组和一个目标整数 k,编写一个函数来判断该数组是否含有连续的子数组,其大小至少为 2,总和为 k 的倍数,即总和为 n*k,其中 n 也是一个整数。

示例 1:

输入: [23,2,4,6,7], k = 6输出: True解释: [2,4] 是一个大小为 2 的子数组,并且和为 6。

示例 2:

输入: [23,2,6,4,7], k = 6输出: True解释: [23,2,6,4,7]是大小为 5 的子数组,并且和为 42。

说明:

  1. 数组的长度不会超过10,000。
  2. 你可以认为所有数字总和在 32 位有符号整数范围内。

思路:和上一题一样用map记录当前到i的和的下标,就能在o(n)完成,这道题有一个点就是当k==0时,要是的第一个数是0的时候下标相减够长度小于2,所以初始化m[0]=-1

class Solution {public:    bool checkSubarraySum(vector
& nums, int k) { map
m ; int sum = 0 ; m[0] = -1 ; for(int i=0;i
1) return true ; }else{ m[tmp] = i ; } } return false ; }};

 

转载于:https://www.cnblogs.com/maskmtj/p/9270880.html

你可能感兴趣的文章
js中面向对象的封装
查看>>
s3c6410_时钟初始化
查看>>
STL中的常用的vector,map,set,Sort用法
查看>>
常用python机器学习库总结
查看>>
C/C++:.hpp与.h区别
查看>>
upc 9318 Slot Machines
查看>>
http方式接口响应实现步骤
查看>>
[转]Java compiler level does not match解决方法
查看>>
多线程中的Lock小结
查看>>
[算法]和为S的两个数字
查看>>
【Lintcode】104.Merge k Sorted Lists
查看>>
怎样把U盘制成驱动盘?
查看>>
Python多线程,多进程,并行,并发,异步编程
查看>>
配置storeconfigs以及解决 Error 400 on SERVER: Could not autoload active_record
查看>>
git 添加新分支后可能报错及解决方案
查看>>
signalR的集群与负载均衡
查看>>
KEILC51编译问题ERROR L104: MULTIPLE PUBLIC DEFINITIONS重复定义
查看>>
PHP反射类的理解(代码篇)
查看>>
怎么安装Apache,php,mysql (二)——php和apache怎么配置mysql?
查看>>
android:hint属性对TextView的影响
查看>>