时间空间复杂度都是O(N)

在转动过的有序数组中寻找目标值

http://www.nowcoder.com/questionTerminal/7cd13986c79d4d3a8d928d490db5d707

我的空间复杂度是O(N) 没有用到转动的特点

import java.util.*;
public class Solution {
    /**
     * 
     * @param A int整型一维数组 
     * @param target int整型 
     * @return int整型
     */
    public int search (int[] A, int target) {
        // write code here
        // 如果先存储元素+下标,再改成有序的,取到目标值之后去哈希表找到对应的下标返回即可
        Map<Integer,Integer> map = new HashMap<>();
        for(int i = 0; i < A.length; i++){
            map.put(A[i],i);
        }
        Arrays.sort(A);
        int left = 0;
        int right = A.length-1;// 这里注意已经提示不存在重复值
        while(left <= right){
            int mid = left + (right - left)/2;
            if(A[mid] == target) return map.get(A[mid]);
            if(A[mid] > target) right = mid-1;
            if(A[mid] < target) left = mid+1;
        }
        return -1;
    }
}
全部评论
今天的面试到此结束
6 回复 分享
发布于 2021-01-04 20:48
后面的有点多余。直接用map.get查找,没有则返回-1就行了
点赞 回复 分享
发布于 2020-12-28 13:02
为什么不直接在数组中矮个找呢,也是O(n)的复杂度,还不额外占用空间。肯定没这么简单的。
点赞 回复 分享
发布于 2021-03-01 21:11
回去等通知吧
点赞 回复 分享
发布于 2021-03-06 01:58
面试官:“给你个机会,在最短的时间内让我记住你”
点赞 回复 分享
发布于 2021-03-18 15:39

相关推荐

2024-12-29 11:08
湖南工业大学 Java
程序员牛肉:简历没什么大问题了。 而且不要再换项目了。三月份就开暑期实习了,现在都一月份了。实在来不及重新开一下项目了。把一个项目写完或许很快,但是把一个项目搞懂吃透并不简单。所以不要换项目了,把你简历上面的两个项目好好挖一挖吧。 具体 体现在:你能不能流利的说出你的项目的每一个功能点代码实现?你能不能说出在这块除了A技术之外,还有其他技术能够实现嘛?如果有其他技术能够实现,那你这块为什么选择了你当前用的这个技术?
投递牛客等公司
点赞 评论 收藏
分享
想顺利毕业的猕猴桃在看牛客:好几个月没面试了,腾讯留面评吗
点赞 评论 收藏
分享
评论
3
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务