
数组类题目
谢蟹蟹猴啊
这个作者很懒,什么都没留下…
展开
-
剑指 Offer 58 - I. 翻转单词顺序 !!!!!!!! 面试可能会问
有时间可以看下这篇https://leetcode-cn.com/problems/fan-zhuan-dan-ci-shun-xu-lcof/solution/yi-ge-mo-ban-shua-bian-suo-you-zi-fu-chu-x6vh//////////////注意就是 string和 vector一样是可以进行push_back 和pop_back()的!class Solution {public: string reverseWords(string s) { .原创 2021-08-12 17:31:03 · 93 阅读 · 0 评论 -
剑指 Offer 56 - I. 数组中数字出现的次数
class Solution {public: vector<int> singleNumbers(vector<int>& nums) { int x = 0, y = 0, n = 0, m = 1; for(int num : nums) // 1. 遍历异或 n ^= num; while((n & m) == 0) // 2. 循环左移,计算 .原创 2021-08-12 10:11:54 · 77 阅读 · 0 评论 -
最长公共前缀!!!!!!!!!!!!!!!!!!!!!!!
class Solution {public: string longestCommonPrefix(vector<string>& strs) { if (!strs.size()) { return ""; } string prefix = strs[0]; int count = strs.size(); for (int i = 1; i < count; .原创 2021-08-11 09:43:55 · 96 阅读 · 0 评论 -
1743. 从相邻元素对还原数组
思路: 这个题目挺妙的,注意到就是相邻包括了左相邻和右相邻,在数组开头和结尾的数字只有1次相邻。因此我们可以把所有数字对应的相邻元素作为哈希表的值存储,然后遍历哈希表,如果值维度是1,说明这个是开头或者结尾得元素。中间得元素相邻是2个得。 然后从后续依次,选择相邻中没走过的元素连接即可。class Solution {public: vector<int> restoreArray(vector<vector<int>>& adjacen.原创 2021-07-25 11:27:41 · 72 阅读 · 0 评论 -
1893. 检查是否区域内所有整数都被覆盖
class Solution {public: bool isCovered(vector<vector<int>>& ranges, int left, int right) { int n=ranges.size(); int count=0; for(int index=left;index<=right;index++){ for(int i=0;i<n;i++){ .原创 2021-07-23 16:24:22 · 57 阅读 · 0 评论 -
930. 和相同的二元子数组 前缀和+哈希表:这里是前缀存到哈希表里面或者滑动窗口
题目: 给你一个二元数组 nums ,和一个整数 goal ,请你统计并返回有多少个和为 goal 的 非空 子数组。子数组 是数组的一段连续部分。 示例:输入:nums = [1,0,1,0,1], goal = 2输出:4解释:如下面黑体所示,有 4 个满足题目要求的子数组:[1,0,1,0,1][1,0,1,0,1][1,0,1,0,1][1,0,1,0,1]思路: 一开始还打算用动态规划,但是这里不是无穷拿,所以只能是01背包,但是是连续的区间,不能用01背包。那考原创 2021-07-08 10:09:22 · 128 阅读 · 0 评论 -
X的N次幂---从o(n)时间复杂度到o(logn)~二分法之递归
50. Pow(x, n)题目: 实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,xn)。思路: 暴力法解决该问题的时间复杂度是o(n),不能通过,那题目相当于暗示小于时间复杂o(n)的算法,我们会想到二分法,一个数字n我们用n/2 n/4 n/8 一直到等于1深度是 o(logn);我们每次都计算当前的一半,然后乘起来即可嘛。可以用递归的方式实现。class Solution {public: double myPowHelper(double x, unsigned int原创 2021-07-04 13:57:28 · 1841 阅读 · 0 评论 -
移动0--- 双指针的应用
283. 移动零思路1: 设置一个count==0,遍历数组如果遇到非零。就把这个数字填入到nums[count],count++这样就是o(N)的时间复杂度。然后如果不要求后面的元素的话就不用管了,如果要求后面的元素那就再从count开始遍历让他给其他数字,比如0class Solution {public: void moveZeroes(vector<int>& nums) { int count=0; for(int i=0;原创 2021-07-01 21:17:48 · 76 阅读 · 0 评论 -
三数之和(暴力法和双指针的办法)+两数之和 +四数之和+最接近的三数之和+...To be continue~~7.1
15:三数之和题目: 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。 注意:答案中不可以包含重复的三元组。思路1:三重循环暴力,注意到每重循环中增加一个判断机制进行去重,这个之前做到过,可以先对数组sort,相同的数字肯定是邻接着的。我们让每次循环时候因为一共是i j k 三个数字,我们让i j k这三位数字中对应的各种种类数字最多出现一次! 比如0 12 ,我们下次i遇到原创 2021-07-01 19:18:48 · 179 阅读 · 0 评论 -
168. Excel表列名称
168. Excel表列名称class Solution {public: string convertToTitle(int columnNumber) { //除以26的余数这个数作为末尾。然后前面的数取整数 string ans; int c; while(columnNumber>0){ //都是少1个 如果是A c= (columnNumber-1)%26+1; //1-26变0-25 再1-26 不然26%26=0不好处理原创 2021-06-29 10:17:41 · 50 阅读 · 0 评论 -
Leetcode401:二进制手表!
题目:思路: 写题目的时候注意问的到底是什么别陷入误区把题目复杂化,题目说了,输入的只是亮的个数,找几个对应的情况! 只是个数,那么我们可以反推,枚举所有时间点亮的个数如果累加是目标值就把这个时间转化成string形式。class Solution {public: vector<string> readBinaryWatch(int turnedOn) { //注意到每个时间都有一个二进制表示 我暴力搜索下所有时间的二进制表示位数。等于就返回 vector&原创 2021-06-21 09:07:30 · 73 阅读 · 0 评论 -
Leetcode477: 汉明距离总和(461的升级版,中等)
思路: 今天的每日一题,先是用二重循环求出所有组合的异或存入数组,然后用昨天的方法2和方法3对每个组合求解,但是超时了: 异或暴力法,在第36个测试案例时失败~class Solution {public: int totalHammingDistance(vector<int>& nums) { //试下暴力法结合异或 vector<int>res;//存储所有组合 int len=nums.size(); int re.原创 2021-05-28 14:07:39 · 122 阅读 · 0 评论 -
Leetcode461:汉明距离(对位的小总结)
思路1:首先根据题目确定数字的位数最多31位。其实就是依次判断对应位是否相同。可以通过对数字进行右移然后判断最低位是否相同。最低位我们知道是决定奇偶的。所以直接通过对x y奇偶是否相同进行判断即可~代码:class Solution {public: int hammingDistance(int x, int y) { int count=0; for(int i=1; i<=31;i++){ if(x%2!=y%2) coun.原创 2021-05-27 09:52:18 · 126 阅读 · 0 评论 -
异或的三道题目整理:Leetcode1738:找出第 K 大的异或坐标值(结合小根堆的知识)
2021.5.19 最近Leetcode官方连续推荐了3天的异或题目,不把我异或教会不罢休啊,不多说了直接上代码,详细看 Leetcode官方题解吧。 异或运算满足结合律和交换律,且任意数异或自身等于 0。 上式可化简为整体思路还是秉持着使用异或的性质结合前缀和~~~~ 两个相同的数异或结果是0 ,0和任何数异或结果都是它本身,即对一个数做两次重复异或运算。 这个数就会消失。 之前的两道异或题目可以参考:1. Leecode421:数组中两个数的最大异或值2. Leetcode144原创 2021-05-19 10:39:12 · 187 阅读 · 0 评论 -
Leetcode1442:形成两个异或相等数组的三元组数目
5.18 又是被异或题支配的一天方法1:二重循环方法3:一重循环思路: 异或的题目最近接连出了3天的每日一题。。。几乎每次都离不开运用异或的性质:a^b =c;a^c=b.同时**0与任何数异或都等于他本身。**我们还要注意到,两个相同的数字异或等于0.这意味着:两个相同的数字与任务数异或等于它本身 a^b=a,则b等于0。反过来a与某个数异或等于她本身,那个数一定等于0 这个题目详细的解析可以看官网题解. 思路比较巧妙。注意到就是构造数组的是时候有时候我们需要比正常的长度+1.一般这种做法有2个原创 2021-05-18 10:16:42 · 177 阅读 · 0 评论 -
Leecode421:数组中两个数的最大异或值
给你一个整数数组nums,返回nums[i] XOR nums[j]的最大运算结果。其中 0<=i<=j<n提示:1 <= nums.length <= 2 * 1040 <= nums[i] <= 231 - 1示例1:输入:nums = [3,10,5,25,2,8]输出:28解释:最大运算结果是 5 XOR 25 = 28.示例2:输入:nums = [0]输出:0分析: 一开始想到的是暴力搜索法,时间复杂度是0(N^2),很不幸原创 2021-05-16 13:48:29 · 229 阅读 · 0 评论 -
Lecode13:罗马数字转整数
这篇是罗马数字转整数和之前写的 整数转罗马数字 类似,整数转罗马数字主要应用贪心原则。而罗马数字转整数直接建立哈希表然后遍历罗马数字对应的string查找数字叠加即可。只是注意到一些特殊情况要做处理。通常情况下,罗马数字中小的数字在大的数字的右边。若输入的字符串满足该情况,那么可以将每个字符视作一个单独的值,累加每个字符对应的数值即可。 若存在小的数字在大的数字的左边的情况,根据规则需要减去小的数字。对于这种情况,我们也可以将每个字符视作一个单独的值,若一个数字右侧的数字比它大,则将该数字的符号取反。原创 2021-05-15 14:16:15 · 123 阅读 · 0 评论 -
Leetcode12:整数转罗马数字(中等)
Leetcode12:整数转罗马数字其实就是按照贪心原则,先列出可选的数字列表。罗马数字通过选择左侧尽可能大的数字来完成重组,且一定可以成功,毕竟存在数字1嘛。 就是注意下数组的赋值不能放在class里面,这样会报错,但是如果是单个字符串或者pair或者int的定义或者vector的初始化内存是没问题的。const pair<int, string> valueSymbols[] = { {1000, "M"}, {900, "CM"}, {500, "D"}原创 2021-05-14 10:21:47 · 175 阅读 · 0 评论