代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素

题目链接:https://leetcode.cn/problems/binary-search/

1、描述:

给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target  ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1

 

错误的地方:

一开始写了调用的时候没有返回结果,输出null,确定是重复调用的时候应该返回每次的结果

class Solution(object):
    def search(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: int
        """
        mid_index = int(len(nums)/2)
        if mid_index == 0:
            if target == nums[0]:
                return 0
            else:
                return -1
        if target == nums[mid_index]:
            return mid_index
        elif target< nums[mid_index]:
            self.search(target=target, nums=nums[0:mid_index])
           
        else :
            self.search(target=target, nums=nums[mid_index:])
            
           

  修改返回加了return之后还是没有全部正确,因为我返回的是当前数组的序号,不是原来数组的序号,所以我在后面加了len

  但是如果-1的时候,是不需要加len的,表示找不到,直接返回就可以了,最后修改成这样啦,哈哈哈

class Solution(object):
    def search(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: int
        """
        mid_index = int(len(nums)/2)
        if target == nums[mid_index]:
            return mid_index
        else:
            if len(nums) == 1:
                return -1
            else:
                if target< nums[mid_index]:
                    res = self.search(target=target, nums=nums[0:mid_index])
                    if res == -1:
                        return -1
                    elif res == 0:
                        if len(nums[0:mid_index]) == 1:
                            return 0
                        else:
                            return res
                    else:
                        return res
                else :
                    res = self.search(target=target, nums=nums[mid_index:])
                    if res == -1:
                        return -1
                    elif res == 0:
                        if len(nums[mid_index:]) == 1:
                            return 0
                        else:
                            return res
                    else:
                        res +=  mid_index
                        return res


  

2\

题目链接:https://leetcode.cn/problems/remove-element/

 

给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。

看不懂原地是啥意思

是移除元素就可以了吗?

后面发现不是,如果只是循环的话,由于每次remove的时候nums会变,导致结果不对,后面加了一个调用就好了

    def removeElement(self, nums, val):
        """
        :type nums: List[int]
        :type val: int
        :rtype: int
        """
        for i in nums:
            if  i == val:
                nums.remove(i)
                return self.removeElement(nums, val)
 

第一天打开结束~~

 

posted @ 2024-06-05 20:44  背负青天乃将图南  阅读(26)  评论(0)    收藏  举报