题目链接:[704.二分查找](704. 二分查找 - 力扣(LeetCode))
文章链接:[代码随想录](代码随想录 (programmercarl.com))
视频链接:[手把手带你撕出正确的二分法 | 二分查找法 | 二分搜索法 | LeetCode:704. 二分查找](手把手带你撕出正确的二分法 | 二分查找法 | 二分搜索法 | LeetCode:704. 二分查找_哔哩哔哩_bilibili)
状态:知道题目思路,但是每次在判断大于号和小于号需要思考一下,容易出错,还有开闭区间容易出错
思路:首先去找到一个数组中间的数值,然后判断中间数和目标数的大小,如果是比目标数小则移动左边的索引,否则移动右边索引,相等则返回中间值的索引
class Solution:
def search(self, nums: List[int], target: int) -> int:
left,right = 0,len(nums)-1
while lefttarget:
right = middle-1
else:
return middle
return -1
左闭右闭区间在于其索引值与数组下标索引值是一一对应的关系,所以有左边的索引等于右边的索引,代码内部的索引也是对应相等的
class Solution {
public:
int search(vector& nums, int target) {
int left= 0,right = nums.size()-1;
while (lefttarget){
right = middle-1;
}
else {return middle;}
}
return -1;
}
};
class Solution:
def search(self, nums: List[int], target: int) -> int:
left,right = 0,len(nums)
while lefttarget:
right = middle
else:
return middle
return -1
class Solution {
public:
int search(vector& nums, int target) {
int left= 0,right = nums.size();
while (lefttarget){
right = middle;
}
else {return middle;}
}
return -1;
}
};
python内部需要注意最后返回值在循环以外,不然会有报错的情况
a.每行代码结束的时候是有英文状态下的;的,每次忘记则会报错
b.和python不同的点事python赋值是链表赋值,但是C++语言是一个一个给值的,所以如果想要一行赋值,则需要进行一句一句的等于,不然会报错
题目链接:27. 移除元素
文章链接:[移除元素](代码随想录 (programmercarl.com))
视频链接:[数组中移除元素并不容易! | LeetCode:27. 移除元素](数组中移除元素并不容易! | LeetCode:27. 移除元素_哔哩哔哩_bilibili)
思路:无从下手,,,
才开始没看明白为什么,然后纸上画了一遍明白了这个是先搜索数值,如果出现了预期值,则进行一个相加,否则的话就是继续去寻找,数组是覆盖而不是删除,用覆盖的思想表示了删除的意思
错误原因:开始的时候想用for循环,然后i从range里面取值,进行i-=1后变成了-1,在进行下一轮的时候还是从range内取值,对其没影响,导致错误
更改:将其转换为while的时候,这个值是一个可控变量
class Solution:
def removeElement(self, nums: List[int], val: int) -> int:
i,n =0,len(nums)
while i
class Solution {
public:
int removeElement(vector& nums, int val) {
int n =nums.size();
for (int i=0;i
class Solution:
def removeElement(self, nums: List[int], val: int) -> int:
slowind = 0
for i in range(len(nums)):
if nums[i] != val:
nums[slowind] = nums[i]
slowind +=1
return slowind
class Solution {
public:
int removeElement(vector& nums, int val) {
int slowind = 0;
for (int fastind=0;fastind
思路:双指针的方法,本质是两层for循环,但是循环的话对于时间复杂度会很高,就会造成报错的情况,所以就想办法看可不可以将一层循环转换成数据标识,进行比较,如果有相等的,就去覆盖数值,否则就继续向前走的思路
遇到的问题:在理解了双指针以后,就是不知道两个指针的快慢应该怎么选择在这一块卡了一下,然后根据已有代码进行绘制走的过程,使用pycharm进行debug了一下,就理解了这个思路
题目链接:977. 有序数组的平方 - 力扣(LeetCode)
文章链接:代码随想录 (programmercarl.com)
视频链接:双指针法经典题目 | LeetCode:977.有序数组的平方
先逐步求出他们的平方值,然后将其保存,最后使用sort函数对列表进行排序即可
class Solution:
def sortedSquares(self, nums: List[int]) -> List[int]:
for i in range(len(nums)):
nums[i]=nums[i]**2
nums.sort()
return nums
这种方法学习了C++排序的一个函数,sort函数,这个函数需要指定元素的起始和终止位置即可
class Solution {
public:
vector sortedSquares(vector& nums) {
for (int i =0;i
class Solution:
def sortedSquares(self, nums: List[int]) -> List[int]:
i,j = 0,len(nums)-1
result = list()
while i
这道题就是让我理解了C++里面的,和;的区别,有一种直白的说法就是,一句话没说完就用,否则就用;,拿这道题来举例在循环中对i和j进行赋值的时候,他俩都需要定义为整型,所以用,但是里面一句话彻底结束,下一个不需要这个定义的时候就用分号
class Solution {
public:
vector sortedSquares(vector& nums) {
int n =nums.size()-1;
vector result(nums.size(),0);
for (int i=0,j=nums.size()-1;i
python return nums.sort()
不会输出排序的结果,会报错a,b=1,2
是正确语法,但是在C++就需要写成int a=1,b=2;
sort(nums.begin(),nums.end())
来表示其起始和终点的位置参与评论
手机查看
返回顶部