当前位置:   article > 正文

c语言力扣刷题-数组_力扣c语言刷题

力扣c语言刷题

1.

1.给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数

算法的时间复杂度应该为 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

  1. double findMedianSortedArrays(int* nums1, int nums1Size, int* nums2, int nums2Size)
  2. {
  3.         int m = nums1Size;
  4.         int n =  nums2Size;
  5.         int left = (m + n + 1/ 2;
  6.         int right = (m + n + 2/ 2;
  7.         return (findKth(nums1,m,n,0, nums20left+ findKth(nums1,m,n,0, nums20right)) / 2.0;
  8. }
  9.     //i: nums1的起始位置 j: nums2的起始位置
  10.     int findKth(int *nums1,int m,int n, int i, int*nums2 ,int j, int k)
  11.     {
  12.         if( i >= m) return nums2[j + k - 1];//nums1为空数组
  13.         if( j >= n) return nums1[i + k - 1];//nums2为空数组
  14.         if(k == 1){
  15.          return nums1[i]<nums2[j]?nums1[i]:nums2[j]; //x>y?x:y如果x大于y则值为x
  16.         }
  17.         int midVal1 = (i + k / 2 - 1 < m) ? nums1[i + k / 2 - 1] :INT_MAX;
  18.         int midVal2 = (j + k / 2 - 1 < n) ? nums2[j + k / 2 - 1] :INT_MAX;//
  19.         if(midVal1 < midVal2){
  20.             return findKth(nums1,m,n, i + k / 2, nums2, j , k - k / 2);
  21.         }else{
  22.             return findKth(nums1,m,n, i, nums2, j + k / 2 , k - k / 2);
  23.         }        
  24.     }

  2.

共有 n 位员工,每位员工都有一个从 0 到 n - 1 的唯一 id 。

给你一个二维整数数组 logs ,其中 logs[i] = [idi, leaveTimei] :

idi 是处理第 i 个任务的员工的 id ,且

leaveTimei 是员工完成第 i 个任务的时刻。所有 leaveTimei 的值都是 唯一 的。

注意,第 i 个任务在第 (i - 1) 个任务结束后立即开始,且第 0 个任务从时刻 0 开始。

返回处理用时最长的那个任务的员工的 id 。如果存在两个或多个员工同时满足,则返回几人中 最小 的 id 。

示例 1:

输入:n = 10, logs = [[0,3],[2,5],[0,9],[1,15]]

输出:1

解释:

任务 0 于时刻 0 开始,且在时刻 3 结束,共计 3 个单位时间。

任务 1 于时刻 3 开始,且在时刻 5 结束,共计 2 个单位时间。

任务 2 于时刻 5 开始,且在时刻 9 结束,共计 4 个单位时间。

任务 3 于时刻 9 开始,且在时刻 15 结束,共计 6 个单位时间。

时间最长的任务是任务 3 ,而 id 为 1 的员工是处理此任务的员工,所以返回 1 。

示例 2:

输入:n = 26, logs = [[1,1],[3,7],[2,12],[7,17]]

输出:3

解释:

任务 0 于时刻 0 开始,且在时刻 1 结束,共计 1 个单位时间。

任务 1 于时刻 1 开始,且在时刻 7 结束,共计 6 个单位时间。

任务 2 于时刻 7 开始,且在时刻 12 结束,共计 5 个单位时间。

任务 3 于时刻 12 开始,且在时刻 17 结束,共计 5 个单位时间。

时间最长的任务是任务 1 ,而 id 为 3 的员工是处理此任务的员工,所以返回 3 。

示例 3:

输入:n = 2, logs = [[0,10],[1,20]]

输出:0

解释:

任务 0 于时刻 0 开始,且在时刻 10 结束,共计 10 个单位时间。

任务 1 于时刻 10 开始,且在时刻 20 结束,共计 10 个单位时间。

时间最长的任务是任务 0 和 1 ,处理这两个任务的员工的 id 分别是 0 和 1 ,所以返回最小的 0 。

提示:

2 <= n <= 500

1 <= logs.length <= 500

logs[i].length == 2

0 <= idi <= n - 1

1 <= leaveTimei <= 500

idi != idi + 1

leaveTimei 按严格递增顺序排列

 

  1. int hardestWorker(int n, int** logs, int logsSize, int* logsColSize)
  2. {
  3.         int y=logs[0][0],max=logs[0][1],i=0;
  4.         for(int j=1;j<= logsSize-1;j++)
  5.         {
  6.              int b=logs[j][1]-logs[j-1][1];
  7.             if(b>max)
  8.             {
  9.                max=b;
  10.                y=logs[j][0];
  11.             }
  12.            else if(max==b)
  13.            {
  14.                 max=b;
  15.                 if(y>logs[j][0])
  16.                     y=logs[j][0];
  17.            }
  18.          
  19.         }
  20.         return y; 
  21. }

2、数之和

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target  的那 两个 整数,并返回它们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。

你可以按任意顺序返回答案。

示例 1:

输入:nums = [2,7,11,15], target = 9

输出:[0,1]

解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。

示例 2:

输入:nums = [3,2,4], target = 6

输出:[1,2]

示例 3:

输入:nums = [3,3], target = 6

输出:[0,1]

  1. int* twoSum(int* nums, int numsSize, int target, int* returnSize){
  2.        * returnSize=2;
  3.         int* p = (int*)malloc(sizeof(int)*2);
  4.           for(int i=0;i<=numsSize-2;i++)
  5.           {
  6.                for(int j=i+1;j<=numsSize-1;j++)
  7.                {
  8.                     if((nums[i]+nums[j])== target)
  9.                     {
  10.                         p[1]=j;
  11.                         p[0]=i;
  12.                         break;
  13.                     }
  14.                }
  15.           }
  16.           return p;
  17. }

                       

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/567537
推荐阅读
相关标签
  

闽ICP备14008679号