lintcode入门篇二

一. 最大子数组

给定一个整数数组,找到一个具有最大和的子数组,返回其最大和。

样例

样例1:

输入:[−2,2,−3,4,−1,2,1,−5,3]
输出:6
解释:符合要求的子数组为[4,−1,2,1],其最大和为 6。

样例2:

输入:[1,2,3,4]
输出:10
解释:符合要求的子数组为[1,2,3,4],其最大和为 10。

挑战

要求时间复杂度为O(n)

注意事项

子数组最少包含一个数

输入测试数据 (每行一个参数)如何理解测试数据?

第一种解法:O(n)时间复杂度

class Solution:
    """
    @param nums: A list of integers
    @return: A integer indicate the sum of max subarray
    """
    def maxSubArray(self, nums):
        # write your code here
        ‘‘‘
        做两步判断:
        1.第一步判断:当n > 0 的时候,继续加。如果n小于0,则n取最新的数,之前的舍弃
        2.第二步判断:sum 和 继续加的n作比较,如果sum < n,那么sum = n,否则sum保持。

        ‘‘‘
        sum = nums[0]
        n = nums[0]
        for i in range(1,len(nums)):
            if n > 0:
                n = n + nums[i]
            else:                  #一旦n < 0,舍弃,取新的值n进行继续相加
                n = nums[i]
            if sum < n:
                sum = n
        return sum

第二种解法:O(n2)时间复杂度

def  MaxSumArray(nums):
    ‘‘‘
    1.取出所有符合条件的顺序数组
    2.然后将所有顺序数组的值放在一个大的数组[]里面,最后返回里面的最大值max
    :param nums:
    :return:
    ‘‘‘
    array = []
    for i in range(len(nums)):
        for j in range(i + 1,len(nums)):
            array.append(sum(nums[i:j]))
    return  max(array)
result = MaxSumArray([-2,2,-3,4,-1,2,1,-5,3])
print(result)

二. 最小子数组

给定一个整数数组,找到一个具有最小和的连续子数组。返回其最小和。

样例

样例 1

输入:[1, -1, -2, 1]
输出:-3

样例 2

输入:[1, -1, -2, 1, -4]
输出:-6

注意事项

子数组最少包含一个数字

class Solution:
    """
    @param: nums: a list of integers
    @return: A integer indicate the sum of minimum subarray
    """
    def minSubArray(self, nums):
        # write your code here
        ‘‘‘
        1.负数一直相加,一旦大于0,则被替换
        2.sum 记录之前保存最小值的和,如果一旦有出现更小的和的话,则被替换
        :param nums:
        :return:
        ‘‘‘
        n = nums[0]
        sum = nums[0]
        for i in range(1,len(nums)):
            if n < 0:
                n = n + nums[i]
            else:
                n = nums[i]
            if sum > n:
                sum = n
        return sum 

三. 数组剔除元素后的乘积

中文English

给定一个整数数组A。
定义B[i] = A[0] * ... * A[i-1] * A[i+1] * ... * A[n-1], 计算B的时候请不要使用除法。请输出B。

样例

样例 1

输入: A = [1, 2, 3]
输出: [6, 3, 2]
解析:B[0] = A[1] * A[2] = 6; B[1] = A[0] * A[2] = 3; B[2] = A[0] * A[1] = 2
class Solution:
    """
    @param: nums: Given an integers array A
    @return: A long long array B and B[i]= A[0] * ... * A[i-1] * A[i+1] * ... * A[n-1]
    """
    def productExcludeItself(self, nums):
        # write your code here
        array = []
        for i in range(len(nums)):
            sum = 1
            for j in range(len(nums)):
                if i != j:
                    sum = sum * nums[j]
            array.append(sum)
        return array

四. 翻转字符串中的单词

给定一个字符串,逐个翻转字符串中的每个单词。

样例

样例  1:
	输入:  "the sky is blue"
	输出:  "blue is sky the"

	样例解释:
	返回逐字反转的字符串.

样例 2:
	输入:  "hello world"
	输出:  "world hello"

	样例解释:
	返回逐字反转的字符串

说明

  • 单词的构成:无空格字母构成一个单词,有些单词末尾会带有标点符号
  • 输入字符串是否包括前导或者尾随空格?可以包括,但是反转后的字符不能包括
  • 如何处理两个单词间的多个空格?在反转字符串中间空格减少到只含一个

输入测试数据 (每行一个参数)如何理解测试数据?

输出: "world hello" 样例解释: 返回逐字反转的字符串. 

说明

  • 单词的构成:无空格字母构成一个单词,有些单词末尾会带有标点符号
  • 输入字符串是否包括前导或者尾随空格?可以包括,但是反转后的字符不能包括
  • 如何处理两个单词间的多个空格?在反转字符串中间空格减少到只含一个
class Solution:
    """
    @param: s: A string
    @return: A string
    """
    def reverseWords(self, s):
        # write your code here
        array = s.split(‘ ‘)
        new_s = ‘‘
        for i in range(len(array)):
            if array[i] != ‘‘:
                new_s = array[i] + ‘ ‘ + new_s
        return new_s

注释:

1.‘hello word  xiao li ‘.split(‘ ‘) 结果为[‘hello‘,‘‘,world‘,‘‘,‘‘,‘xiao‘,‘‘,‘li‘,‘‘]

五. 比较字符串

比较两个字符串A和B,确定A中是否包含B中所有的字符。字符串A和B中的字符都是 大写字母

样例

给出 A = "ABCD" B = "ACD",返回 true

给出 A = "ABCD" B = "AABC", 返回 false

注意事项

在 A 中出现的 B 字符串里的字符不需要连续或者有序。

class Solution:
    """
    @param A: A string
    @param B: A string
    @return: if string A contains all of the characters in B return true else return false
    """
    def compareStrings(self, A, B):
        # write your code here
        for n in B:
            if n not in A:
                return False
            A = A.replace(n,‘‘,1) ##每次校验完之后,要去除掉首个校验通过的字符(即校验在A里面的字符,字符位置不固定,但固定是首次出现的字符)
        return True

注释:

对于A,B分别为‘ABCD‘和‘AACD‘的特殊情况,如果每次判断完,不进行去除的话,则会返回True。只有每次判断完,之后去除掉当前的首个判断成功的字符,才可以正确判断出结果。

原文地址:https://www.cnblogs.com/yunxintryyoubest/p/12181669.html

时间: 2024-11-10 00:06:48

lintcode入门篇二的相关文章

8.15_Linux之bash shell脚本编程入门篇(二)以及文件查找和压缩的使用

bash shell脚本编程入门篇(二) read命令的使用 作用: 使用read来把输入值分配给一个或多个shell变量: -p指定要显示的提示 -t TIMEOUT read从标准输入中读取值,给每个单词分配一个变量,所有剩余单词都被分配给最后一个变量 EX.read -p "Enter a filename:" FILE 条件选择之if的使用 if的作用:选择执行(注意:if语句可嵌套) 单分支 if 判断条件;then 条件为真的分支代码 fi EX.单分支案例 双分支 if

【SSRS】入门篇(二) -- 建立数据源

通过 [SSRS]入门篇(一) -- 创建SSRS项目 这篇,我们建立了一个SSRS项目: 接下来,我们以 AdventureWorks2012 示例数据库,讲下如何建立数据源:(AdventureWorks2012 下载) 1.解决方案资源管理器 ->右键选择共享数据源 ->添加新数据源: 2.在共享数据源属性窗口输入数据库名称:AdventureWorks2012:类型选择:Microsoft SQL Server:点击"编辑"按钮: 3.在连接属性窗口输入服务器名 -

lintcode入门篇三

一. 两数之和 给一个整数数组,找到两个数使得他们的和等于一个给定的数 target. 你需要实现的函数twoSum需要返回这两个数的下标, 并且第一个下标小于第二个下标.注意这里下标的范围是 0 到 n-1. 样例 Example1: 给出 numbers = [2, 7, 11, 15], target = 9, 返回 [0, 1]. Example2: 给出 numbers = [15, 2, 7, 11], target = 9, 返回 [1, 2]. 挑战 Either of the

lintcode入门篇一

1.反转一个只有3位数的整数. 样例 样例 1: 输入: number = 123 输出: 321 样例 2: 输入: number = 900 输出: 9 注意事项 你可以假设输入一定是一个只有三位数的整数,这个整数大于等于100,小于1000. class Solution: """ @param number: A 3-digit number. @return: Reversed number. """ def reverseIntege

lintcode入门篇四

142. O(1)时间检测2的幂次 用 O(1) 时间检测整数 n 是否是 2 的幂次. 样例 Example 1: Input: 4 Output: true Example 2: Input: 5 Output: false 挑战 O(1) time 第一种方法:&的方法 class Solution: """ @param n: An integer @return: True or false """ ''' 1.使用递归的方法来

lintcode入门篇五

158. 两个字符串是变位词 写出一个函数 anagram(s, t) 判断两个字符串是否可以通过改变字母的顺序变成一样的字符串. 样例 样例 1: 输入: s = "ab", t = "ab" 输出: true 样例 2: 输入: s = "abcd", t = "dcba" 输出: true 样例 3: 输入: s = "ac", t = "ab" 输出: false 挑战 O(n)

lintcode入门篇六

185. 矩阵的之字型遍历 给你一个包含 m x n 个元素的矩阵 (m 行, n 列), 求该矩阵的之字型遍历. 样例 样例 1: 输入: [[1]] 输出: [1] 样例 2: 输入: [ [1, 2, 3, 4], [5, 6, 7, 8], [9,10, 11, 12] ] 输出: [1, 2, 5, 9, 6, 3, 4, 7, 10, 11, 8, 12] class Solution: ''' 1.首先i,j都不能小于0,并且i<len(matrix) and j<len(mat

lintcode入门篇七

211. 字符串置换 给定两个字符串,请设计一个方法来判定其中一个字符串是否为另一个字符串的置换. 置换的意思是,通过改变顺序可以使得两个字符串相等. 样例 Example 1: Input: "abcd", "bcad" Output: True Example 2: Input: "aac", "abc" Output: False class Solution: """ @param A:

lintcode入门篇十五

846. 多关键字排序 中文English 给定 n 个学生的学号(从 1 到 n 编号)以及他们的考试成绩,表示为(学号,考试成绩),请将这些学生按考试成绩降序排序,若考试成绩相同,则按学号升序排序. 样例 样例1 输入: array = [[2,50],[1,50],[3,100]] 输出: [[3,100],[1,50],[2,50]] 样例2 输入: array = [[2,50],[1,50],[3,50]] 输出: [[1,50],[2,50],[3,50]] class Solut