LeetCode
1. 在流数据中,寻找第k大的数
k = 3 s1 = [] while 1: num = int(input("Input your number: ")) if num < 0: print("The 3th of numbers is ", s1[-1]) if len(s1) < 3: s1.append(num) else: s1.append(num) s1.sort(reverse=True) s1 = s1[:3]
# 复杂度 klog(k)
# 方法二 小顶堆 复杂度 log(k)
2. 判断是否是回文字符串
2.1利用双指针判断,一个从左往右,另外一个从右往左,判断所在的字符是否相等
2.2利用栈来存储数据,然后依次出栈,观察出栈的顺序是不是与入栈的顺序一样
def isPalindrome(str1): if len(str1) == 0: return True left = 0 right = len(str1) - 1 while left < right: if not(str1[left].isalnum()): # 除了字符(包括汉字)和数字以外,其他的不比较,跳过 left += 1 elif not(str1[right].isalnum()): right -= 1 else: if str1[left] != str1[right]: return False left += 1 right -= 1 return True str1 = "level" bool1 = isPalindrome(str1) print(bool1) # true
bool symmetry(ElemType str[]){ int i;ElemType e; SqStack *st; InitStack(st); //初始化栈 for(i=0;str[i]!='\0';i++){ //将数组中的元素依次入栈 Push(st,str[i]); } for(i=0;str[i]!='\0';i++){ // 将栈中的元素依次出栈,与入栈的顺序进行比较 Pop(st,e); if(str[i]!=e){ DestroyStack(st); return False; } } DestroyStack(st); return False; }
3.判断回文数
方法一:将整数转为字符串,利用上文的方法解决问题
方法二:数学方法
分别计算出整数的最高位和最低位的值进行比较,循环,依次进行判断
def isPalindrome(num): if num < 0: return False div = 1 while (num//div) >= 10: # 计算出整数的位数 div *= 10 while num > 0: left = num//div right = num % 10 if left != right: return False num = (num % div)//10 # 去掉最右边和最左边的值 div = div/100 return True print(isPalindrome(1221))
方法三 把整数对折后看两边的数是否相同
def isPalindrome(x): if x<0 or (x and x%10==0): # 当整数的最后一位是0时,返回false return False reverse_number = 0 while x > reverse_number: reverse_number = reverse_number*10 + x%10 x = x // 10 return x==reverse_number or x==reverse_number//10 # 当整数位数不是偶数时,比较时去掉一位 print(isPalindrome(12521))