有关c++动态数组vector
相比原始数组,动态数组有许多优势,c++原始数组存在越界问题,(在debug模式下对于长度为2的[ ],a[-1]会报错,但是在release模式下a[-1]=100,a[100]=100均能执行成功,但可能导致未知的错误),原始数组无法计算大小(可以使用 sizeof(你定义的变量名称))/sizeof(int)的方式计算),且 c++中函数是不能直接返回一个(原始类型的)数组的,但是数组其实就是指针,所以可以让函数返回指针来实现:
class Solution {
public:
int[] twoSum(vector<int>& nums, int target) {
int indexs[2];
for(int i =0; i< nums.size();i++){
for(int j =i+1; j< nums.size();j++){
if ((nums[i]+nums[j]) == target){
indexs[0] = i;
indexs[1] = j;
}
}
}
return indexs;
}
};
class Solution {
public:
int* twoSum(vector<int>& nums, int target) {
int indexs[2];
for(int i =0; i< nums.size();i++){
for(int j =i+1; j< nums.size();j++){
if ((nums[i]+nums[j]) == target){
indexs[0] = i;
indexs[1] = j;
}
}
}
cout << indexs[0] << " " << indexs[1] << endl;
return indexs;
}
};
#include
std::array<int,100> myarray;
myarray.size()
动态数组 vector |
#include |
初始化 |
vector vec(10); //默认初始值都为 0 |
|
vector vec(10, 1.0);//统一指定初始值 |
|
vector vec {0, 1, 2, 3, 4, 5, 6,7,8,9}//依次赋值 |
赋值 |
vec[0] = 1; |
获取长度 |
int vsize = vec.size() |
尾部插入值 |
vec.push_back( value ); |
尾部弹出值 |
vec.pop_back(); |
获取开头指针 |
vec.begin(); |
获取尾部指针 |
vec.end(); |
插入值 |
vec.insert(vec.begin(), 6); // [1, 1, 1] -> [6, 1, 1, 1] |
|
vec.insert(vec.begin(), 6); // [1, 1, 1] -> [6, 1, 1, 1] |
|
vec.insert(vec.begin()+1, 6); // [1, 1, 1] -> [1, 6, 1, 1] |
|
vec.insert(vec.end(), 6); // [1, 1, 1] -> [1, 1, 1, 6] |
|
vec.insert(vec.end()-1, 6); // [1, 1, 1] -> [1, 1, 6, 1] |
注:.nums.length 是java的写法,使用vec.size()也就是nums.size
语言 |
关键字 |
长度值 |
初始化 |
c++ |
vector |
nums.size() |
vector indexs(2, 1); |
java |
int[] |
indexs.length |
int[] indexs = new int[2]; |
题目描述(两数之和)
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。(假设每种输入只会对应一个答案。)
暴力解法(两层循环遍历相加看是否等于结果)
c++
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
vector<int> indexs(2, 1);
for(int i =0; i< nums.size();i++){
for(int j =i+1; j< nums.size();j++){
if ((nums[i]+nums[j]) == target){
indexs[0] = i;
indexs[1] = j;
}
}
}
return indexs;
}
};
JAVA
class Solution {
int[] indexs = new int[2];
public int[] twoSum(int[] nums, int target) {
for(int i=0;i<nums.length;i++){
for(int j=i+1;j<nums.length;j++)
{
if(nums[i]+nums[j]== target){
indexs[0] = i;
indexs[1] = j;
return indexs;
}
}
}
return indexs;% return {};
}
}
PYTHON3
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
for i in range(len(nums)):
for j in range(i+1,len(nums),1):
if nums[i]+nums[j] == target:
return [i,j]
其他解法
- 这样我们创建一个哈希表,对于每一个 x,我们首先
查询哈希表中是否存在 target - x
,然后将 x 插入到哈希表中
class Solution {
public:
vector twoSum(vector& nums, int target) {
unordered_map hashtable;
for (int i = 0; i < nums.size(); ++i) {
auto it = hashtable.find(target - nums[i]);
if (it != hashtable.end()) {
return {it->second, i};
}
hashtable[nums[i]] = i;
}
return {};
}
};
作者:LeetCode-Solution
链接:https://leetcode.cn/problems/two-sum/solution/liang-shu-zhi-he-by-leetcode-solution/
参考与更多
- 有关c++动态数组的底层实现
- C++中vector的简单用法