zoukankan      html  css  js  c++  java
  • 循环

    NC98 螺旋矩阵

    题目描述

    给定一个m x n大小的矩阵(m行,n列),按螺旋的顺序返回矩阵中的所有元素。

    示例1

    输入--[[1,2,3],[4,5,6],[7,8,9]]

    返回值--[1,2,3,6,9,8,7,4,5]

     1 #
     2 # 
     3 # @param matrix int整型二维数组 
     4 # @return int整型一维数组
     5 #
     6 class Solution:
     7     def spiralOrder(self , matrix ):
     8         # write code here
     9         if len(matrix) == 0:
    10             return list()
    11         res = list()
    12         row_begin, row_end = 0, len(matrix) - 1
    13         column_begin, column_end = 0, len(matrix[0]) - 1
    14         
    15         while row_begin <= row_end and column_begin <= column_end:
    16             for column_index in range(column_begin, column_end+1):
    17                 res.append(matrix[row_begin][column_index])
    18             row_begin += 1
    19 
    20             for row_index in range(row_begin, row_end+1):
    21                 res.append(matrix[row_index][column_end])
    22             column_end -= 1
    23 
    24             if row_begin <= row_end:
    25                 for ano_column_index in range(column_end, column_begin-1, -1):
    26                     res.append(matrix[row_end][ano_column_index])
    27             row_end -= 1
    28 
    29             if column_begin <= column_end:
    30                 for ano_row_index in range(row_end, row_begin-1, -1):
    31                     res.append(matrix[ano_row_index][column_begin])
    32             column_begin += 1
    33             
    34         return res
    35         
    36         
    View Code

     NC132 环形链表的约瑟夫问题

    题目描述

    编号为1到n的n个人围成一圈。从编号为1的人开始报数1,依次下去,报到m的人离开,问最后留下的一个人,编号是多少?

    示例1

    输入--5,2

    返回值--3

    说明

    开始5个人 1,2,3,4,5 ,从1开始报数,1->1,2->2编号为2的人离开

    1,3,4,5,从3开始报数,3->1,4->2编号为4的人离开

    1,3,5,从5开始报数,5->1,1->2编号为1的人离开

    3,5,从3开始报数,3->1,5->2编号为5的人离开

    最后留下人的编号是3

     1 #
     2 # 
     3 # @param n int整型 
     4 # @param m int整型 
     5 # @return int整型
     6 #
     7 class Solution:
     8     def ysf(self , n , m ):
     9         # write code here
    10         res = []
    11         for i in range(n):
    12             res.append(i+1)
    13         i = 0
    14         for j in range(n-1):
    15             i = (i+m-1) % (n-j)
    16             del res[i]
    17             
    18         return res[0]
    View Code

     NC 83 子数组最大乘积

    题目描述

    给定一个double类型的数组arr,其中的元素可正可负可0,返回子数组累乘的最大乘积。

    示例1

    输入--[-2.5,4,0,3,0.5,8,-1]

    返回值--12.00000

     1 #
     2 # 
     3 # @param arr double浮点型一维数组 
     4 # @return double浮点型
     5 #
     6 class Solution:
     7     def maxProduct(self , arr ):
     8         # write code here
     9         
    10         if not arr:
    11             return 0
    12         arr_len = len(arr)
    13 
    14         imin = imax = res = arr[0]
    15         for i in range(1, arr_len):
    16             imax,imin = max(arr[i]*imax,arr[i]*imin,arr[i]),min(arr[i]*imax,arr[i]*imin,arr[i])
    17             res = max(res,imax)
    18 
    19         return res
    View Code

     NC 130 分糖果问题

    题目描述

    一群孩子做游戏,现在请你根据游戏得分来发糖果,要求如下:
    1. 每个孩子不管得分多少,起码分到一个糖果。
    2. 任意两个相邻的孩子之间,得分较多的孩子必须拿多一些糖果。(若相同则无此限制)
    给定一个数组arr代表得分数组,请返回最少需要多少糖果。
    [要求]
    时间复杂度为On, 空间复杂度为O1

    示例1

    输入--[1,1,2]

    返回值--4

    说明--最优分配方案为1, 1,2    

    备注:

    1 leq N leq 10^51N105
    0 leq arr_i leq 10^50arri105

     1 #
     2 # pick candy
     3 # @param arr int整型一维数组 the array
     4 # @return int整型
     5 #
     6 class Solution:
     7     def candy(self , arr ):
     8         # write code here
     9         ans = [1]*len(arr)
    10         for i in range(1, len(arr)):
    11             if arr[i] > arr[i-1]:
    12                 ans[i] = ans[i-1]+1
    13         for i in range(len(arr)-1,0,-1):
    14             if arr[i-1] > arr[i] and ans[i-1] <= ans[i]:
    15                 ans[i-1] = ans[i]+1
    16         return sum(ans)
    17     
    18 S = Solution()
    19 while True:
    20     try:
    21         arr = list(map(int,input()[1:-1].split(',')))
    22         #print(','.join(S.LIS(arr)))
    23         res = S.candy(arr)
    24         print('%s' % res)
    25     except:
    26         break
    View Code
  • 相关阅读:
    其实Unix很简单
    路由器硬件和操作系统软件关系之我见
    80后的我们
    虚拟机虚拟网卡作用
    [转]Cisco小失误,大麻烦
    DDWRT让我们的无线路由器用上Linux
    2011年全国大学生电子设计竞赛试题来自官网
    太网帧结构详解
    TCP/IP网络编程之四书五经
    四种以太网数据包详解
  • 原文地址:https://www.cnblogs.com/dede-0119/p/14438061.html
Copyright © 2011-2022 走看看