由于自己是Java萌新,一路过来才刚入门,数据结构啥还木了解,暂不考虑时间复杂度,以实现为主。争取月薪过万呀。
坚持就是胜利。
704. 二分查找 ❤️
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的
target,如果目标值存在返回下标,否则返回 -1。
class Solution {
public int search(int[] nums, int target) {
//循环查找,找不到就返回-1
for(int i=0;i<nums.length;i++){
if(target == nums[i]){
return i;
}
}
return -1;
}
}
278. 第一个错误的版本 ❤️
你是产品经理,目前正在带领一个团队开发新的产品。不幸的是,你的产品的最新版本没有通过质量检测。由于每个版本都是基于之前的版本开发的,所以错误的版本之后的所有版本都是错的。
假设你有 n 个版本 [1, 2, …, n],你想找出导致之后所有版本出错的第一个错误的版本。
你可以通过调用 bool isBadVersion(version) ,错误版本返回true。接口来判断版本号 version
是否在单元测试中出错。实现一个函数来查找第一个错误的版本。你应该尽量减少对调用 API 的次数。
public class Solution extends VersionControl {
public int firstBadVersion(int n) {
int left =1;
int right = n;
int mid=0;
while(left<right){
mid = left+(right-left)/2;
if(!isBadVersion(mid)){
left = mid+1;//如果中间值返回false,表示错误出现在的[mid+1,rirht]中,只要有一次返回true,后面就会一直返回true,left就一直等于第一次返回true的值
}else{
right = mid;//如果中间值返回false,表示错误出现在的[left,mid]中
}
}
return left;
}
}
35. 搜索插入位置 ❤️
给定一个排序数组(数组值递增)和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
// 思路就是相等时,返回当前的下标,不相等时,只有3种情况,一个就是比最大的大,比最小的小。比最小的小输出的就是当前比较的下标,所以可以和等于归纳为一种情况,比最大的大,直接返回nums.length;
// 在中间时,由于数组为递增组合,比当前的小时,一定不会存在和数组后面的数相等的情况,于是输出当前的下标就好
class Solution {
public static int searchInsert(int[] nums, int target) {
int m = 0;
//循环查找
for (int i = 0; i < nums.length; i++) {
if (target <= nums[i]) {
return m = i;
}
}
return nums.length;
}
}