以下题目来自于Leetcode
输入: “)()())” 输出: 4 解释: 最长有效括号子串为 “()()”
定义长度 — 循环—找左括号数量 --找右括号数量 —取最小值
Class Solution: def longvalidParentheses(self, s:str)->int: len=s.length while(i<len): if(t=="("): count0=count0+1 else: count1=count1+1 if(count0<count1): return count0 else: return count1若是"))()))" 这样就没有办法正确判断了
等待匹配的左括号索引、充当“分隔符”的右括号索引。后者入栈因为:当左括号匹配光了,栈还需要留一个“垫底”的“参照物” class Solution: def longestValidParentheses(self, s: str) -> int: maxlen = 0 stack = [-1] for i in range(len(s)): if s[i] == “(”: stack.append(i) continue del stack[-1] if stack == []: stack.append(i) else: maxlen = max(maxlen,i-stack[-1]) return maxlen 作者:hyj8
假设按照升序排序的数组在预先未知的某个点上进行了旋转。
( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。
搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。
你可以假设数组中不存在重复的元素。
你的算法时间复杂度必须是 O(log n) 级别。
循环 找目标值 找到返回index 找不到 返回-1
运行成功 不过解答错误
根据时间复杂度 只能选择二分查找 可以具体到这个例子的数值 进行分析
class Solution: def search(self, nums: List[int], target: int) -> int: if not nums: return -1 l, r = 0, len(nums) - 1 while l <= r: mid = (l + r) // 2 if nums[mid] == target: return mid if nums[0] <= nums[mid]: if nums[0] <= target < nums[mid]: r = mid - 1 else: l = mid + 1 else: if nums[mid] < target <= nums[len(nums) - 1]: l = mid + 1 else: r = mid - 1 return -1 作者:LeetCode-Solution
