ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

day23

2022-07-19 13:04:26  阅读:169  来源: 互联网

标签:votes nums int after day23 vector before


1.剑指 Offer 39. 数组中出现次数超过一半的数字

 1)排序后位于中间的数就是我们要求的数

1 class Solution {
2 public:
3     int majorityElement(vector<int>& nums) {
4       sort(nums.begin(),nums.end());
5       return nums[nums.size()/2]; //因为底数是从0开始计数的,所以nums.size()/2的位置实际上是nums.size()/2 + 1的位置
6     }
7 };

 2)摩尔投票法,https://leetcode.cn/leetbook/read/illustration-of-algorithm/99ussv/

 就是x记录了一个数,用votes来记录这个数的票数(也就是它出现的次数),如果接下来的数和它不同votes就减一,相同就加一,当votes等于0时就重新选一个数开始计票,因为我们所求的数字出现次数超过一半,所以它的票数比 其他与它不同的数 的票数 加起来都多,所以到最后votes大于0的留下来的x肯定就是我们所求的

 1 class Solution {
 2 public:
 3     int majorityElement(vector<int>& nums) {
 4       int x,votes = 0;
 5       for(auto num : nums){
 6           if(votes == 0) x = num;
 7           if(x == num)  votes ++;
 8           else votes --;
 9       }
10       return x;
11     }
12 };

2.剑指 Offer 66. 构建乘积数组

 before累乘i前面i ~1个元素,after累乘i后面i ~ n后面的元素 ,所以b[i]=before[i - 1]*after[i + 1];

 1 class Solution {
 2 public:
 3     vector<int> constructArr(vector<int>& a) {
 4       vector<int> b;
 5       int n = a.size();
 6       if(n == 0) return b;
 7       int before[n],after[n];
 8       before[0] = a[0],after[n - 1] = a[n - 1];
 9       for(int i = 1;i < n - 1;i ++)
10        before[i] = a[i] * before[i - 1];
11       for(int i = n - 2;i > 0;i --)
12        after[i] = a[i] * after[i + 1];
13       for(int i = 0;i < n;i ++){
14         if(i == 0) b.push_back(after[1]);
15         else if(i == n - 1) b.push_back(before[n - 2]);
16         else b.push_back(before[i - 1]*after[i + 1]);
17       }
18       return b;
19     }
20 };

 

标签:votes,nums,int,after,day23,vector,before
来源: https://www.cnblogs.com/balabalabubalabala/p/16493670.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有