数据结构数组相关代码(数据结构笔试复测Leecode牛客)
Posted 小葵花幼儿园园长
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构数组相关代码(数据结构笔试复测Leecode牛客)相关的知识,希望对你有一定的参考价值。
数组
简单
两数之和
描述
给出一个整型数组 numbers 和一个目标值 target,请在数组中找出两个加起来等于目标值的数的下标,返回的下标按升序排列。
(注:返回的数组下标从1开始算起,保证target一定可以由数组里面2个数字相加得到)
解题思路:
- 两个for循环(缺点:超时)
- 哈希表<取值, 下标>
class Solution
public:
/**
*
* @param numbers int整型vector
* @param target int整型
* @return int整型vector
*/
vector<int> twoSum(vector<int>& numbers, int target)
// write code here
vector<int> res;
int n = numbers.size();
if(n==0)
return res;
unordered_map<int, int> haxi;//定义哈希表,<取值,下标>
for(int i=0; i<n; i++)
if(haxi.count(target-numbers[i])) //找到执行,没找到不执行
res.push_back(haxi[target-numbers[i]]+1);
res.push_back(i+1);
break;
else
//将未找到的值插入哈希表中
haxi[numbers[i]] = i;
return res;
// for(int i=0; i<numbers.size()-1; i++)
// for(int j=i+1; j<numbers.size(); j++)
// if(numbers[i] + numbers[j] == target)
// res.push_back(i+1);
// res.push_back(j+1);
// return res;
//
//
//
// return res;
//
;
合并两个有序的数组
描述
给出一个有序的整数数组 A 和有序的整数数组 B ,请将数组 B 合并到数组 A 中,变成一个有序的升序数组
注意
1.保证 A 数组有足够的空间存放 B 数组的元素, A 和 B 中初始的元素数目分别为 m 和 n,A的数组空间大小为 m+n
2.不要返回合并的数组,将数组 B 的数据合并到 A 里面就好了,且后台会自动将合并后的数组 A 的内容打印出来,所以也不需要自己打印
3. A 数组在[0,m-1]的范围也是有序的
思路:
- step 1:使用三个指针,i指向数组A的最大元素,j指向数组B的最大元素,k指向数组A空间的结尾处。
- step 2:从两个数组最大的元素开始遍历,直到某一个结束,每次取出较大的一个值放入数组A空间的最后,然后指针一次往前。
- step 3:如果数组B先遍历结束,数组A前半部分已经存在了,不用管;但是如果数组A先遍历结束,则需要把数组B剩余的前半部分依次逆序加入数组A前半部分,类似归并排序最后的步骤。
class Solution
public:
void merge(int A[], int m, int B[], int n)
int i = m-1, j = n-1, k = m+n-1;
while(i>=0 && j>=0)
if(A[i] > B[j])
A[k--] = A[i--];
else
A[k--] = B[j--];
if(i < 0)
while(j>=0)
A[k--] = B[j--];
;
中等
最长无重复子数组
描述
给定一个长度为n的数组arr,返回arr的最长无重复元素子数组的长度,无重复指的是所有数字都不相同。
子数组是连续的,比如[1,3,5,7,9]的子数组有[1,3],[3,5,7]等等,但是[1,3,7]不是子数组
解题思路
- step 1:构建一个哈希表,用于统计数组元素出现的次数。
- step 2:窗口左右界都从数组首部开始,每次窗口优先右移右界,并统计进入窗口的元素的出现频率。
- step 3:一旦右界元素出现频率大于1,就需要右移左界直到窗口内不再重复,将左边的元素移除窗口的时候同时需要将它在哈希表中的频率减1,保证哈希表中的频率都是窗口内的频率。
- step 4:每轮循环,维护窗口长度最大值。
class Solution
public:
/**
*
* @param arr int整型vector the array
* @return int整型
*/
int maxLength(vector<int>& arr)
// write code here
unordered_map<int, int> mp;
int res = 0;
int j = 0;
for(int i=0; i<arr.size(); i++)
//右移进入哈希表统计出现次数
mp[arr[i]]++;
//出现次数大于1,有重复
while(mp[arr[i]] > 1)
mp[arr[j++]]--;
res = max(res, i-j+1);
return res;
;
阅读世界,共赴山海
423全民读书节,邀你共读
以上是关于数据结构数组相关代码(数据结构笔试复测Leecode牛客)的主要内容,如果未能解决你的问题,请参考以下文章
数据结构栈队列相关代码(数据结构笔试复测Leecode牛客)