当前位置:   article > 正文

leetcode 刷题笔记1_leetcode需要写main函数吗

leetcode需要写main函数吗

1、题目:给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。

你可以按任意顺序返回答案。

示例 1:

输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 

https://leetcode-cn.com/problems/two-sum/

最终解法:

  1. class Solution {
  2. public:
  3. vector<int> twoSum(vector<int>& nums, int target) {
  4. vector<int> a;
  5. for(int i = 0;i < nums.size();i++){
  6. for(int j = i+1;j < nums.size();j++){
  7. if(nums[i]+nums[j] == target&&i!=j){
  8. a.push_back(i);
  9. a.push_back(j);
  10. }
  11. }
  12. }
  13. return a;
  14. }
  15. };

这个题亦三种解决思路:

本题可以通过三种方式去解答

  1. 暴力法1:双层for循环进行遍历,属于最基础的检索与判断方式O(n*n)
  2. 暴力法2:通过python的**str in list**方式逐个遍历,虽然代码看似简单,但每一次in操作的复杂度一样是O(n),所以总体复杂度O(n*n)
  3. 之所以把这道题归档在HashMap类中,是因为通过HashMap的方式,能在O(n)的时间复杂度下完成

 

由于本人对之前用的是C,C++就粗略看看,所以对解决这道题不流畅

  1. public:
  2. vector<int> twoSum(vector<int>& nums, int target) {
  3. for(int i = 0;sizeof(nums)/sizeof(nums[0]);i++){
  4. for(int j = i+1;j>sizeof(nums)/sizeof(nums[0]);j++){
  5. if(nums[i]+nums[j] == target){
  6. cout << i <<j;
  7. }
  8. }
  9. }
  10. }
  11. };
  12. int main(int argc, char *argv[]){
  13. vector <int> nums;
  14. int target = 9;
  15. for(int i=0;i<10;i++){
  16. nums.push_back(i);
  17. }
  18. Solution s;
  19. s.twoSum(nums,target);
  20. return 0;
  21. }

以上是自己错误示例:

1、不需要自己加main函数

2、Solution 类中方法没有返回值

      没有定义vector对象的返回值,没有使用“push_back(const T& x):向量尾部增加一个元素X

3、C中语法习惯,sizeof(nums)/sizeof(nums[0]),在C++这块不适用。

     因为形参是vector,“size() const:返回向量中元素的个数”。所以上述用法是错误的

vector容器更多基础用法见:https://www.runoob.com/w3cnote/cpp-vector-container-analysis.html

总结:这个题应该从形参第一眼就理解是考察vector容器的用法。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/633137
推荐阅读
相关标签
  

闽ICP备14008679号