给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小。注意:num 的长度小于 10002 且 ≥ k。
num 不会包含任何前导零。

(1)本不该,单独开一章节来讲个小题,奈何面试得时候,写的不对,这就尴尬了呀。啊啊啊。

思路:我们还是采用 类似贪心得方法,从高位起,选择尽可能小的数字(注意 0 不参与比较,),当我们发现前一位大于后一位得时候,我们将其删掉,并且更新K值,遍历一遍之后,如果K还没用完,此时得数组序列 应该式 递增得,所有我们要删除后面k位。最后删除首位得0

import sys # remove k
def removeKdigist(num,k):m = len(num)if m == 0 or m ==k :return '0'if k == 0: return num i = 0while i<m -1 and k>0:print num ,iif num[i] > num[i+1] and num[i+1]!='0' and num[i]!='0':# if num[i] > num[i+1]: 原先得答案 是这样得 这就会导致 0 参与比较,这样得化
#例子中10200 k=2 删除之后 就是200 ,加上 我得改进,是 102 num = num[:i] + num[i+1:]k = k-1 if i >0:i = i-1else:i+=1print num,"aa"print numif k>0:num = num[:m-k]while len(num)>1 and num[0]=='0':num = num[1:]return numstra = "1432219"
k = 3
stra = "10200"
k=1
stra = '10'
k = 2
print removeKdigist(stra,k)

(2)旋转数组

题目描述:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。

解题思路:

输入的数组为非减排序数组的旋转,数组分为两个排好序的数组。{3,4,5,1,2}其中前半部分{3,4,5}和后半部分{1,2}都为非减数组,且前半部分的数大于等于后半部分。

对于排序的数组->二分查找

1.取数组中间数,若中间的数大于等于数组第一个数,说明中间数位于前半个非递减数组中,因此最小值在数组的后半部分。

2.若中间数小于等于数组最后一个数,说明中间数位于后半个非递减数组中,因此最小值在数组的前半部分

3.若数组起始数,中间数,末位数相同,则不能判断最小值位于数组的前半部分还是后半部分,需要采用暴力排序,依次比较查找。(特殊输入:重复数字的数组)

4.直到指向数组前和后的指针下标相邻时,后面的指针对应数组的最小数字。

测试用例:

1.边界值测试:输入直接为非递减数组(未经过旋转)如果第一个数字小于最后一个数字,说明数组递增,可以直接返回第一个数字作为最小数字。输入数组含有重复的数字

def minNumber(arr):n = len(arr)minNum = -1if len(arr) == 0: return -1left = 0 right = n -1  mid = left#当最左边值 大于 等于 右边的时候 while arr[left] >= arr[right] :# 数组 就剩下两个值if right - left == 1:mid = rightbreakmid =(left + right) /2if arr[left] == arr[mid] and arr[left] == arr[right]:return oderFind(arr,left,right)if arr[mid] >= arr[left]:left = mid elif arr[mid] <=arr[right]:right = mid return arr[mid]
def oderFind(arr,left,right):min = arr[left]while left<=right:if arr[left] < min:min = arr[left]left +=1 return minarr = [1,1,1,1,0,1]
arr = [1,0]
arr = [3,4,5,1,2,3]
arr = [1,1,2,3,4,5,6]
print minNumber(arr) 

(2)搜狗面试题:

import java.util.Scanner;public class foot {public static void main(String[] args) {Scanner sc = new  Scanner(System.in);int le = 1;while(sc.hasNext()) {int n = sc.nextInt();int s = sc.nextInt();int t = sc.nextInt();if(s<le||t<le||s>n||t>n||n<le) System.out.println(-1);else {if(s<t) {if(s==le) {if(n==t) System.out.println(0);else System.out.println(1);}else {if(t-s>1) System.out.println(2);else System.out.println(1);}}else if(s>t) {if(s==n) {if(t==le) System.out.println(0);else System.out.println(1);}else {if(s-t>1) System.out.println(2);else System.out.println(1);}}else {if(le==n) System.out.println(0);else System.out.println(-1);}}}}
}

(2)全排列问题,这是面试一家小公司得时候得题目,提前知道了题目,还是差点没做出来。

公式:全排列f(n) = n! ,如:1,2,3三个元素全排列为:

1,2,3

1,3,2

2,1,3

2,3,1

3,1,2

3,2,1

# -*- coding:utf-8 -*-
#coding:utf-8
import sys
reload(sys)
sys.setdefaultencoding('utf-8')def swap(arr,i ,j):temp = arr[i]arr[i] = arr[j]arr[j] = temp
def array_full(a,left ,right):if left == right-1:print str(a).decode('string_escape')for i in range(left,right):if a[i] in a[left:i]: continue  # 有重复元素得 全排列swap(a,i,left)array_full(a,left+1,right)swap(a,i,left)
stra = ["天","向","上","天"]
array_full(stra,0,len(stra))

(2)面经:面试得时候,还是会 不自觉得紧张,怎么办呢

旋转数组的最小数 php 牛客网_一文搞定—移掉K个数字amp;amp;旋转数组amp;amp;全排列...相关推荐

  1. 2019牛客网暑假多校训练第四场 K —number

    链接:https://ac.nowcoder.com/acm/contest/884/K 来源:牛客网 题目描述 300iq loves numbers who are multiple of 300 ...

  2. JavaScript_牛客网_编程初学者入门训练(21-30题解)

    牛客网编程初学者入门训练题解JavaScript版本 编程初学者入门训练第21-30题解答(js) 22.你能活多少秒 25.计算体重指数 26.计算三角形的周长和面积 27.计算球体体积 28.大小 ...

  3. JavaScript_牛客网_编程初学者入门训练(131-140题解)

    牛客网编程初学者入门训练题解JavaScript版本 编程初学者入门训练第131-140题解答(js) 131.KiKi学程序设计基础 132.KiKi算期末成绩 133.KiKi说祝福语 134.K ...

  4. HJ6 质数因子_牛客网_华为机试题

    描述 功能:输入一个正整数,按照从小到大的顺序输出它的所有质因子(重复的也要列举)(如180的质因子为2 2 3 3 5 ) 数据范围: 输入描述: 输入一个整数 输出描述: 按照从小到大的顺序输出它 ...

  5. 牛客网_剑指Offer_Python实现_更新中

    剑指Offer编程题汇总 第1题_二维数组中的查找 第2题_替换空格 第3题_从尾到头打印链表 第4题_重建二叉树 第5题_用两个栈实现队列 第6题_旋转数组的最小数字 第7题_斐波那契数列 第8题_ ...

  6. 牛客网_判断推理选择题

    赵明.钱红.孙杰三人被北京大学.清华大学和北京师范大学录取.他们分别被哪个学校录取的,同学们作了如下的猜测: 同学甲猜:赵明被清华大学录取,孙杰被北京师范大学录取. 同学乙猜:赵明被北京师范大学录取, ...

  7. 下面有关java类加载器牛客网_下面有关java classloader说法错误的是?

    0 有的书上介绍的JVM中3个默认ClassLoader是:BootStrap ClassLoader,Extension ClassLoader,System ClassLoader.当然有时我们也 ...

  8. java按字节截取字符串牛客网_字符串计数

    /*看了之前50多个答案,发现大部分都是错误的,根据自己对题目的理解,给出了以下思路,目前 我还没有找到bug,欢迎牛友们检查,如有bug,我继续修改,答题思路是对的*/ /*首先是从之前的几个测试样 ...

  9. 牛客网_数量关系选择题

    6 ,14 ,30 ,62 ,( ) 正确答案: C 你的答案: C (正确) 85 92 126 250 办公室的基本功能从社会组织的整体看,办公室是管理工作的中心,处于( ) 正确答案: A 你的 ...

最新文章

  1. Andrid 图片被挤压
  2. Struts2s:select/s:select
  3. 15---Net基础加强
  4. zip伪加密做法及原理
  5. Java_memcached 使用说明
  6. OGG重复记录导致复制进程挂起
  7. android没有蓝牙设备,【Android】没有触发LeScanCallback导致无法搜索到蓝牙设备
  8. Shell 常用积累
  9. [转]php返回json数据中文显示的问题
  10. .Net 数据缓存浅析
  11. 利用遗传算法求解TSP问题
  12. 20190910每日一句 你有勇气直面自己的恐惧吗?
  13. 文件名变乱码怎样修复?
  14. MySQL连接navicat出现 2059 - authentication plugin ‘caching_sha2_password解决方法
  15. 互联网公司大数据,主要有什么优势和劣势?
  16. java 接入微信获取人员信息名称带表情符号无法存储
  17. Swift 网络请求——Moya的使用
  18. 2018年阿里安全工程师面试
  19. dss linux 摄像头 rtsp,用VLC读取摄像头产生RTSP流,DSS主动取流转发(一)(二) 【转】...
  20. 数据挖掘#特征工程(二)特征重要性及可解释性总结

热门文章

  1. 在Eclipse中运行hadoop程序
  2. 剑指offer 栈的压入、弹出序列
  3. wordcloud用来制作词云
  4. Android/Java中使用Protobuf的Any类型实现泛型解析
  5. 读完这篇文章,就基本搞定了Redis数据库
  6. 对数据科学家来说最重要的算法和统计模型
  7. Hbase过滤器(Filter)汇总
  8. 【MySQL经典案例分析】关于数据行溢出由浅至深的探讨
  9. Android组件化专题-路由动态注入跳转参数以及获取其他模块的fragment
  10. CocoaPods最新版本升级