当前位置: 首页 > wzjs >正文

贵阳网站优化排名广州seo招聘信息

贵阳网站优化排名,广州seo招聘信息,网站开发的兼职网站,有源码怎么搭建游戏二分查找 hot100_34.在排序数组中查找元素的第一个和最后一个位置 给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。 如果数组中不存在目标值 target,返回 [-1, -1]。 你必须设计…

二分查找

hot100_34.在排序数组中查找元素的第一个和最后一个位置

给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。

如果数组中不存在目标值 target,返回 [-1, -1]

你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。

示例 1:

输入:nums = [5,7,7,8,8,10], target = 8
输出:[3,4]

示例 2:

输入:nums = [5,7,7,8,8,10], target = 6
输出:[-1,-1]

示例 3:

输入:nums = [], target = 0
输出:[-1,-1]
#include<iostream>
#include<vector>
using namespace std;class Solution {
public:int search(vector<int>& nums, float target){int l = 0, r = nums.size()-1;while(l <= r){int m = (r + l)/2;if(nums[m] > target)	r = m - 1;else	l = m + 1;}return l;}vector<int> searchRange(vector<int>& nums, int target) {int left = search(nums, float(target - 0.5));int right = search(nums, float(target + 0.5)) - 1;
//		cout << left << " " <<right << endl;if(left <= right)	return {left, right};else return {-1, -1};		}
};int main(){vector<int> nums = {5,6,6,8,8,9};int target  = 7;Solution A;vector<int> ans = A.searchRange(nums, target);cout << ans[0] << " " << ans[1] << endl;return 0;
}

hot100_33.搜索旋转排序数组

整数数组 nums 按升序排列,数组中的值 互不相同

在传递给函数之前,nums 在预先未知的某个下标 k0 <= k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k+1], ..., nums[n-1], nums[0], nums[1], ..., nums[k-1]](下标 从 0 开始 计数)。例如, [0,1,2,4,5,6,7] 在下标 3 处经旋转后可能变为 [4,5,6,7,0,1,2]

给你 旋转后 的数组 nums 和一个整数 target ,如果 nums 中存在这个目标值 target ,则返回它的下标,否则返回 -1

你必须设计一个时间复杂度为 O(log n) 的算法解决此问题。

示例 1:

输入:nums = [4,5,6,7,0,1,2], target = 0
输出:4

示例 2:

输入:nums = [4,5,6,7,0,1,2], target = 3
输出:-1

示例 3:

输入:nums = [1], target = 0
输出:-1
#include<iostream>
#include<vector>
using namespace std;class Solution {
public:int search(vector<int>& nums, int target) {int l = 0, r = nums.size() - 1;while (l <= r) {int mid = (l + r) / 2;if(nums[mid] == target) return mid;// nums[lo] > target: 目标值小于左边界// nums[lo] > nums[mid]: 左边界大于中间值,说明左半部分是无序的// target > nums[mid]: 目标值大于中间值// 这三个条件的异或结果决定了目标值应该在左半部分还是右半部分if ((nums[l] > target) ^ (nums[l] > nums[mid]) ^ (target > nums[mid]))l = mid + 1;elser = mid;}return -1;}
};int main(){
//	vector<int> nums = {4,5,6,7,0,1,2};
//	int target  = 0;
//	vector<int> nums = {3,5,1};
//	int target  = 3;vector<int> nums = {5,1,3};int target  = 5;Solution A;int ans = A.search(nums, target);cout << ans << endl;return 0;
}

hot100_153.寻找旋转排序数组中的最小值

已知一个长度为 n 的数组,预先按照升序排列,经由 1n旋转 后,得到输入数组。例如,原数组 nums = [0,1,2,4,5,6,7] 在变化后可能得到:

  • 若旋转

    4
    

    次,则可以得到

    [4,5,6,7,0,1,2]
    
  • 若旋转

    7
    

    次,则可以得到

    [0,1,2,4,5,6,7]
    

注意,数组 [a[0], a[1], a[2], ..., a[n-1]] 旋转一次 的结果为数组 [a[n-1], a[0], a[1], a[2], ..., a[n-2]]

给你一个元素值 互不相同 的数组 nums ,它原来是一个升序排列的数组,并按上述情形进行了多次旋转。请你找出并返回数组中的 最小元素

你必须设计一个时间复杂度为 O(log n) 的算法解决此问题。

示例 1:

输入:nums = [3,4,5,1,2]
输出:1
解释:原数组为 [1,2,3,4,5] ,旋转 3 次得到输入数组。

示例 2:

输入:nums = [4,5,6,7,0,1,2]
输出:0
解释:原数组为 [0,1,2,4,5,6,7] ,旋转 4 次得到输入数组。

示例 3:

输入:nums = [11,13,15,17]
输出:11
解释:原数组为 [11,13,15,17] ,旋转 4 次得到输入数组。
class Solution {
public:int findMin(vector<int>& nums) {int low = 0;int high = nums.size() - 1;while (low < high) {int pivot = (low + high) / 2;if (nums[pivot] < nums[high]) high = pivot ;else low = pivot + 1;}return nums[low];}
};

hot100_4.寻找两个正序数组的中位数、

给定两个大小分别为 mn 的正序(从小到大)数组 nums1nums2。请你找出并返回这两个正序数组的 中位数

算法的时间复杂度应该为 O(log (m+n))

示例 1:

输入:nums1 = [1,3], nums2 = [2]
输出:2.00000
解释:合并数组 = [1,2,3] ,中位数 2

示例 2:

输入:nums1 = [1,2], nums2 = [3,4]
输出:2.50000
解释:合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5
class Solution {
public:int getKthElement(const vector<int>& nums1, const vector<int>& nums2, int k) {int m = nums1.size();int n = nums2.size();int index1 = 0, index2 = 0;while (true) {// 边界情况if (index1 == m) {return nums2[index2 + k - 1];}if (index2 == n) {return nums1[index1 + k - 1];}if (k == 1) {return min(nums1[index1], nums2[index2]);}// 正常情况int newIndex1 = min(index1 + k / 2 - 1, m - 1);int newIndex2 = min(index2 + k / 2 - 1, n - 1);int pivot1 = nums1[newIndex1];int pivot2 = nums2[newIndex2];if (pivot1 <= pivot2) {k -= newIndex1 - index1 + 1;index1 = newIndex1 + 1;}else {k -= newIndex2 - index2 + 1;index2 = newIndex2 + 1;}}}double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {int totalLength = nums1.size() + nums2.size();if (totalLength % 2 == 1) {return getKthElement(nums1, nums2, (totalLength + 1) / 2);}else {return (getKthElement(nums1, nums2, totalLength / 2) + getKthElement(nums1, nums2, totalLength / 2 + 1)) / 2.0;}}
};
http://www.dtcms.com/wzjs/18553.html

相关文章:

  • 东莞网站建设制作价格seo关键词优化推荐
  • 沈阳建站程序免费做网站怎么做网站链接
  • 郑州一网网站建设怎么创造自己的网站
  • 科技公司网站设计服务友情链接交易
  • php网站开发模式有哪些刷关键词排名seo
  • 镇江网站优化seo电商中seo是什么意思
  • 你做网站群好朋友的作文成人短期电脑培训班学费
  • 网站建设案例平台淘宝关键词排名优化
  • 网站建设网站维护网站外包今日新闻热点大事件
  • 页面做的比较炫酷的网站seo智能优化软件
  • 做网站子页莱阳seo排名
  • 公司网站一般去哪里做网站建设怎么弄
  • 米定制网的网站是那个公司做广州今日刚刚发生的新闻
  • 甜妹妹福利wordpressseo广告优化多少钱
  • 上海力晟建设工程有限公司网站怎样在百度上建立网站
  • 武汉营销型网站建设公司哪家专业软文街官网
  • wordpress旅游公司主题seo品牌
  • 内蒙古建设执业资格注册中心网站网站关键词排名优化软件
  • 深圳企业建站高性价比的选择合肥seo代理商
  • 建公司网站报价企业网络
  • 微信公众号微网站怎么建设网站seo哪家好
  • 网站推广的基本方法对于大部分网站来说都是适用的营销到底是干嘛的
  • 用vs做的网站怎么打开上海搜索seo
  • 网站开发开票交税登封网络推广
  • 织梦网站怎么做软文推广服务
  • 服装企业官方网站电脑优化软件
  • 做网站的经验今天合肥刚刚发生的重大新闻
  • 济源做网站360站长
  • 建网站要多少钱用自己的服务器新闻发稿公司
  • 有多人做网站是个人备案在线代理浏览网站免费