给定一个整数数组nums,按升序排序,数组中的元素各不相同。 nums数组在传递给search函数之前, 会在预先未知的某个下标 t( 0 <= t <= nums.length-1)上进行 旋转,让数组变为[nums[t], nums[t+1], …, nums[nums.length-1], nums[0], nums[1], …, nums[t-1]]。 比如,数组[0,2,4,6,8,10]在下标2处旋转之后变为[6,8,10,0,2,4] 现在给定一个旋转后的数组nums和一个整数target,请你查找这个数组是不是存在这个target,如果存在,那么返回它的下标,如果不存在,返回-1-笔试面试资料

这是qklbishe.com第10142 篇笔试面试资料
提供答案分析,通过本文《给定一个整数数组nums,按升序排序,数组中的元素各不相同。 nums数组在传递给search函数之前, 会在预先未知的某个下标 t( 0 <= t <= nums.length-1)上进行 旋转,让数组变为[nums[t], nums[t+1], …, nums[nums.length-1], nums[0], nums[1], …, nums[t-1]]。 比如,数组[0,2,4,6,8,10]在下标2处旋转之后变为[6,8,10,0,2,4] 现在给定一个旋转后的数组nums和一个整数target,请你查找这个数组是不是存在这个target,如果存在,那么返回它的下标,如果不存在,返回-1-笔试面试资料》可以理解其中的代码原理,这是一篇很好的求职学习资料
本站提供程序员计算机面试经验学习,笔试经验,包括字节跳动/头条,腾讯,阿里,美团,滴滴出行,网易,百度,京东,小米,华为,微软等互联网大厂真题学习背诵。

答案:

给定一个整数数组nums,按升序排序,数组中的元素各不相同。
nums数组在传递给search函数之前,在预先未知的某个下标 t0 <= t <= nums.length-1)上进行旋转,让数组变为[nums[t], nums[t+1], …, nums[nums.length-1], nums[0], nums[1], …, nums[t-1]]。
比如,数组[0,2,4,6,8,10]在下标2处旋转之后变为[6,8,10,0,2,4]
现在给定一个旋转后的数组nums和一个整数target,请你查找这个数组是不是存在这个target,如果存在,那么返回它的下标,如果不存在,返回-1
给定一个整数数组nums,按升序排序,数组中的元素各不相同。    nums数组在传递给search函数之前, 会在预先未知的某个下标  t( 0 &lt;= t &lt;= nums.length-1)上进行 旋转,让数组变为[nums[t], nums[t+1], ..., nums[nums.length-1], nums[0], nums[1], ..., nums[t-1]]。       比如,数组[0,2,4,6,8,10]在下标2处旋转之后变为[6,8,10,0,2,4]      现在给定一个旋转后的数组nums和一个整数target,请你查找这个数组是不是存在这个target,如果存在,那么返回它的下标,如果不存在,返回-1 MrFortune
public class Solution {     /**      * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可      *      *       * @param nums int整型一维数组       * @param target int整型       * @return int整型      */     public int search (int[] nums, int target) {         // write code here         return binarySearch(nums, 0, nums.length - 1, target);     }     private int binarySearch(int[] nums, int left, int right, int target) {         if (left > right) {             return -1;         }         int mid = left + (right - left) / 2;         if (nums[mid] == target) {             return mid;         }         if (nums[mid] > nums[left]) {             if (target >= nums[left] && target < nums[mid]) {                 return binarySearch(nums, left, mid - 1, target);             } else {                 return binarySearch(nums, mid + 1, right, target);             }         } else {             if (target > nums[mid] && target <= nums[right]) {                 return binarySearch(nums, mid + 1, right, target);             } else {                 return binarySearch(nums, left, mid - 1, target);             }         }     } }

今天 15:36:51 回复(0)
Java

给定一个整数数组nums,按升序排序,数组中的元素各不相同。    nums数组在传递给search函数之前, 会在预先未知的某个下标  t( 0 &lt;= t &lt;= nums.length-1)上进行 旋转,让数组变为[nums[t], nums[t+1], ..., nums[nums.length-1], nums[0], nums[1], ..., nums[t-1]]。       比如,数组[0,2,4,6,8,10]在下标2处旋转之后变为[6,8,10,0,2,4]      现在给定一个旋转后的数组nums和一个整数target,请你查找这个数组是不是存在这个target,如果存在,那么返回它的下标,如果不存在,返回-1 每日一刷

1.利用HashMap

import java.util.*; public class Solution {     public int search (int[] nums, int target) {         // write code here         HashMap<Integer,Integer> hm = new HashMap<>();         for(int i =0; i<nums.length; i++){             hm.put(nums[i],i);         }         Arrays.sort(nums);         int left = 0, right= nums.length-1;         while(left<=right){             int mid = left+(right - left)/2;             if(nums[mid] == target) return hm.get(nums[mid]);             if(nums[mid] > target)right = mid-1;             if(nums[mid] < target)left = mid+1;         }         return -1;     } }

2.直接二分

import java.util.*; public class Solution {     public int search (int[] nums, int target) {         // write code here         int lo=0,hi=nums.length-1;         while(lo <= hi){             int mid = lo+ (hi-lo)/2;             if(nums[mid] == target) return mid;             if(nums[mid] <nums[hi] && nums[mid]<target && target<=nums[hi])                 lo = mid+1;             else if(nums[mid] >nums[hi] &&!( nums[lo] <=target && target < nums[mid]))                 lo = mid+1;             else                 hi = mid-1;         }         return -1;     } }

今天 11:39:16 回复(0)

文章部分来自互联网,侵权联系删除
www.qklbishe.com

区块链毕设网(www.qklbishe.com)全网最靠谱的原创区块链毕设代做网站
部分资料来自网络,侵权联系删除!
资源收费仅为搬运整理打赏费用,用户自愿支付 !
qklbishe.com区块链毕设代做网专注|以太坊fabric-计算机|java|毕业设计|代做平台 » 给定一个整数数组nums,按升序排序,数组中的元素各不相同。 nums数组在传递给search函数之前, 会在预先未知的某个下标 t( 0 <= t <= nums.length-1)上进行 旋转,让数组变为[nums[t], nums[t+1], …, nums[nums.length-1], nums[0], nums[1], …, nums[t-1]]。 比如,数组[0,2,4,6,8,10]在下标2处旋转之后变为[6,8,10,0,2,4] 现在给定一个旋转后的数组nums和一个整数target,请你查找这个数组是不是存在这个target,如果存在,那么返回它的下标,如果不存在,返回-1-笔试面试资料

提供最优质的资源集合

立即查看 了解详情