leetcode 973.最接近原点的K个点

找出最接近原点的点,其实就是看它们距离的长短,排个序就好,但关键是

它有可能出界,

条件是最多一万个点,每个点的xy值就是一万,那么一万的平方就是10000 0000,相加就是20000 0000,最大数214783647
20000 0000
21478 3647
嗯,刚好,没有任何关系。
然后你用选择排序排前n个就好了。。。好简单啊。。。
leetcode的难易程度应该跟最简单的代码量为标准的。

经过判断,常规方法果然有时间限制的。

要想进一步压缩时间,那么多少位的位置就不应该知道了,这个怎么编码呢?

其实就是一个简单的排序问题,并且题目中的要求低,时间复杂度要求高,分明就是让你用不稳定排序,毕竟排序就那九种,没有什么新的了,反正排序必花费nlogn的时间。要更少必然不能使用排序。。

看看大神的解法,将时间复杂度压缩到On了,真厉害,值得学习。。

// 找k为哨兵
// 从头向后遍历,如果这个数比哨兵小且在哨兵右边,调换个个
// 如果这个数比哨兵大且在哨兵左边,调个个
// 如果遍历到i==k而且哨兵位置也等于k,结束
// 如果遍历到k但是哨兵位置小于k,进行下一次迭代,只不过是从begin开始
// 如果遍历到k但是哨兵位置大于k,以k为哨兵,重新遍历一遍,这么一个递归
// 如果这样的话,我并不认为这个能 节省时间复杂度啊

如果说,在比较的过程中,不断接近k的位置,怎么样?就会有不确定性

算了,nlogn吧,难受。

因此在做题的时候,首先要看自己的时间复杂度,如果时间复杂度太普通,就不要做了,早晚会超时的。别说进90%,他这个平台误差太大,只要时间复杂度最小就行。

相信我,快排肯定能过的。






 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值