力扣題目彙總(兩數之和Ⅱ-輸入有序數組,刪除排序數組中的重複項,驗證迴文串)

兩數之和 II - 輸入有序數組

1.題目描述

  1. 給定一個已按照升序排列 的有序數組,找到兩個數使得它們相加之和等於目標數。python

    函數應該返回這兩個下標值 index1 和 index2,其中 index1 必須小於 index2數組

    說明:app

    • 返回的下標值(index1 和 index2)不是從零開始的。
    • 你能夠假設每一個輸入只對應惟一的答案,並且你不能夠重複使用相同的元素。

    示例:函數

    輸入: numbers = [2, 7, 11, 15], target = 9
    輸出: [1,2]
    解釋: 2 與 7 之和等於目標數 9 。所以 index1 = 1, index2 = 2 。

    2.解題思路

第一點:數有2個,
第二點:兩個數的和爲target
第三點:兩個數可能會相同,相同兩個數應爲他是有序的索引必定會是連續的

3.解題

class Solution:
    def twoSum(self, numbers: List[int], target: int) -> List[int]:
        numbers_set = set(numbers)   #去重減小執行時間
        new_list = []
        for a in numbers_set:
            if target -a in numbers_set:
                b = target -a                #判斷這個值是否減去後在列表中
                if a != b:                    #若是兩個值不相同那確定兩個索引不同
                    new_list.append(numbers.index(a)+1)
                else:
                    if numbers.count(a) != 1:    #若是值同樣那要計數看看原來列表裏面是否與兩個
                        new_list.append(numbers.index(a)+1)
                        new_list.append(numbers.index(a)+2)
                        break
        new_list.sort()      #應爲集合是無序的要排序                  
        return new_list
        #直接列表搜太費時間了,題目超時
        # new_list = []
        # for a in range(len(numbers)):
        #     if target - numbers[a] in numbers:
        #         if target - numbers[a] !=numbers[a]:
        #             new_list.append(a+1)
        #         else:
        #             if numbers.count(numbers[a]) != 1:
        #                 new_list.append(a+1)
        # print(new_list) 
        # return new_list

刪除排序數組中的重複項

1.題目描述

給定一個排序數組,你須要在原地刪除重複出現的元素,使得每一個元素只出現一次,返回移除後數組的新長度。code

不要使用額外的數組空間,你必須在原地修改輸入數組並在使用 O(1) 額外空間的條件下完成。排序

示例 1:索引

給定數組 nums = [1,1,2], 

函數應該返回新的長度 2, 而且原數組 nums 的前兩個元素被修改成 1, 2。 

你不須要考慮數組中超出新長度後面的元素。

示例 2:leetcode

給定 nums = [0,0,1,1,1,2,2,3,3,4],

函數應該返回新的長度 5, 而且原數組 nums 的前五個元素被修改成 0, 1, 2, 3, 4。

你不須要考慮數組中超出新長度後面的元素。

說明:rem

爲何返回數值是整數,但輸出的答案是數組呢?字符串

請注意,輸入數組是以「引用」方式傳遞的,這意味着在函數裏修改輸入數組對於調用者是可見的。

你能夠想象內部操做以下:

// nums 是以「引用」方式傳遞的。也就是說,不對實參作任何拷貝
int len = removeDuplicates(nums);

// 在函數裏修改輸入數組對於調用者是可見的。
// 根據你的函數返回的長度, 它會打印出數組中該長度範圍內的全部元素。
for (int i = 0; i < len; i++) {
    print(nums[i]);
}

2.解題思路

#逆向思惟,倒着來若是發現重複的將其刪除

3.解題

class Solution:
    def removeDuplicates(self, nums: List[int]) -> int:
        for i in range(len(nums)-1, 0, -1):
            if nums[i] == nums[i-1]: nums.pop(i)
        return len(nums)

驗證迴文串

1題目描述

給定一個字符串,驗證它是不是迴文串,只考慮字母和數字字符,能夠忽略字母的大小寫。

說明:本題中,咱們將空字符串定義爲有效的迴文串。

示例 1:

輸入: "A man, a plan, a canal: Panama"
輸出: true

示例 2:

輸入: "race a car"
輸出: false

2.解題思路

將字符串中的字母按順序拿出來,而且將大寫的字母轉化爲小寫字母添加到一個新的字符串中,而後判斷迴文字符便可

3.解題

class Solution:
    def isPalindrome(self, s: str) -> bool:
        s_filter = ''.join(filter(str.isalnum, s)).lower()
        return s_filter[::-1] == s_filter

`有更加好的思路,或者解題方法評論區留言謝謝

相關文章
相關標籤/搜索