算法打卡第二天

第一题

 一开始没看标题 于是用了一种遍历来找数(的确效率低下)

然后看了看二分法教程 一会就会了

class Solution {
    public int search(int[] nums, int target) {
        int left=0,right=nums.length-1,mid;
        if(nums[left]>target||nums[right]<target)
        return -1;
        while(left<=right)
        {
            mid=(left+right);
            if(nums[mid]==target)
            return mid;
            else if(target>nums[mid])
            left=mid+1;
            else
            right=mid-1;
        }
        return -1;
    }
}

题目中6个数 可能不是基数不好区别

咋就在案例中加个1 凑个基数

-1 0 1 3 5 9 12

left为最左边 right为最后边的数 mid为中间数,第一次判断中间数 则为下标3 也是数组中的数字3。

假设target为0,而target小于这个3 所以我们可以把下标3包括后面大于他的下标都可以不管了,所以可以直接让right=mid-1;界限划分到-1到1中。再用一次二分法,结果就出来了。右边同样如此。

2.

 第一次编码的时候,发现超内存了(尴尬,于是去找了其它方法试试)

然后想了想,如果直接找这个数的的左右界限不就可以了 

 

class Solution{
public List<Integer> targetIndices(int[] nums, int target) {
    Arrays.sort(nums);
    int l=0,r=nums.length-1;
    while(l<=r){
        int mid=(r-l)/2+l;
        if (nums[mid]>=target)
            r=mid-1;
        else l=mid+1;
    }
    int left=l;
    l=0;
    r =nums.length-1;
    while(l<=r){
        int mid=(r-l)/2+l;
        if(nums[mid]>target)
            r=mid-1;
        else l=mid+1;
    }
    ArrayList<Integer> list=new ArrayList<>();
    for(int i=left;i<=r;i++){
        list.add(i);
    }
    return list;
}
}

3.

 (一开始就想着遍历,但是的确麻烦且不满足题目要求),后来用的哈希表(好像也不符合条件,快慢指针没学过...之后好好学一学)

class Solution {
    public int findDuplicate(int[] nums) {
        Set<Integer> b1=new HashSet<Integer>();
        for(int num:nums){
            if(b1.contains(num)){
                return num;
            }
            b1.add(num);
        }
        return 0;
    }
}

 

4.Problem - 1692E - Codeforcesicon-default.png?t=M5H6https://codeforces.com/problemset/problem/1692/E

嗯,依旧蒙圈 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值