力扣刷题题解注意(1

力扣704二分查找

int mid=(right-left)/2+left;

//不用(left+right)是因为当left和right很大的时候,相加可能会导致溢出,而right-left之后再加上left可以减少溢出的可能性

if(target>nums[mid])
  left=mid;
else if(target<nums[mid])
  right=mid;

//当时第一次是这样写的,我清楚边界出现问题,但是我在想即使mid 不被包含但是那有怎样,下次就可以更新了left和right,我模拟了一下寻找元素的left和right,发现正常。但是!!!如果要找的target不在数组中呢?能保证返回-1吗?举个例子:

[-1,0,3,5,9,12]寻找2:

与3比与0比与0比与0比
left0011
right5222
mid2111

可见如果使用错误的边界,那么就会无限循环,超出时间限制!!所以不要忽略编程中的小错误,小问题不解决大问题更加麻烦!!

力扣27移除元素

1.看到题目“返回相同元素去除之后的列表元素个数”,我想如果使用python,直接list.count(val)算出有几个重复元素val,再使用len(list)相减不就可以?但是不要忽略题头给定是list的引用,因为结果会检验。

2.第一次用python没写清楚,主要是深刻理解“双指针”,“双指针”中一个指针指示原来的数组中的元素,新指针指向新数组中的元素,根据要求把新数组赋值给原数组。

力扣977有序数组的平方

class Solution:
    def sortedSquares(self, nums: List[int]) -> List[int]:
        for i in range(len(nums)):
            if nums[i]<0:
                a=0-nums[i]
                nums[i]=a
        nums.sort(key=None,reverse=False)#升序
        for i in range(len(nums)):
            nums[i]=nums[i]*nums[i]
        return nums

1.使用暴力排序,代码如上,用python列表list中的属性,list.sort(key=None,reverse=False),key表示要对比的元素,reverse=True表示降序,reverse=False表示升序。

2.使用双指针排序,前提是分析出最终大的元素都集中在数组两端。这次“双指针”的使用不同于27,本题两个指针ij分别指向原数组首尾,第三个指针k指向新数组result的尾元素。依次比对最大元素,然后赋值给result中的k,k--。为什么不把k初值指向初始元素呢?因为我们比较结果是最大元素!!

3.注意双指针的运用方式多样化,双指针指向数组的位置并没有一个定论,要具体问题具体分析,但是可以肯定的一点是,运用在数组排序问题比较常见。

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,关于力扣刷题C++常用操作,我可以给你一些常见的操作和技巧: 1. 使用 STL 容器和算法库:STL(Standard Template Library)是 C++ 标准库中的一个重要组成部分,包含了许多常用的容器和算法。在力扣刷题中,使用 STL 可以大大提高代码的效率和可读性。例如,vector 可以用来存储动态数组,sort 可以用来排序等等。 2. 使用 auto 关键字:auto 关键字可以自动推导变量类型,可以减少代码量和提高可读性。例如,auto x = 1; 可以自动推导出 x 的类型为 int。 3. 使用 lambda 表达式:lambda 表达式是 C++11 中引入的一种匿名函数,可以方便地定义一些简单的函数对象。在力扣刷题中,使用 lambda 表达式可以简化代码,例如在 sort 函数中自定义比较函数。 4. 使用位运算:位运算是一种高效的运算方式,在力扣刷题中经常会用到。例如,左移运算符 << 可以用来计算 2 的幂次方,右移运算符 >> 可以用来除以 2 等等。 5. 使用递归:递归是一种常见的算法思想,在力扣刷题中也经常会用到。例如,二叉树的遍历、链表的反转等等。 6. 使用 STL 中的 priority_queue:priority_queue 是 STL 中的一个容器,可以用来实现堆。在力扣刷题中,使用 priority_queue 可以方便地实现一些需要维护最大值或最小值的算法。 7. 使用 STL 中的 unordered_map:unordered_map 是 STL 中的一个容器,可以用来实现哈希表。在力扣刷题中,使用 unordered_map 可以方便地实现一些需要快速查找和插入的算法。 8. 使用 STL 中的 string:string 是 STL 中的一个容器,可以用来存储字符串。在力扣刷题中,使用 string 可以方便地处理字符串相关的问题。 9. 注意边界条件:在力扣刷题中,边界条件往往是解决问题的关键。需要仔细分析题目,考虑各种边界情况,避免出现错误。 10. 注意时间复杂度:在力扣刷题中,时间复杂度往往是评判代码优劣的重要指标。需要仔细分析算法的时间复杂度,并尽可能优化代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值