![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
<-->
gitlijian.cn
展开
-
两个栈实现一个队列,这里注意S2为空时才能再有元素入栈,否则会破坏队列的性质
### 解题思路此处撰写解题思路### 代码```cppclass MyQueue {private: stack<int> s1, s2;public: /** Initialize your data structure here. */ MyQueue() { } /** Push element x to the back of queue. */ void push(int x) { s1.p.原创 2021-02-07 12:07:53 · 88 阅读 · 0 评论 -
公共节点-不断交换,总会相遇
面试题 02.07. 链表相交/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) { struct ListNode *p=headA;原创 2020-08-19 22:55:54 · 137 阅读 · 0 评论 -
190. 颠倒二进制位
190. 颠倒二进制位uint32_t reverseBits(uint32_t n) { uint32_t ret=0, move=31; while(n!=0) { ret+=(n&1)<<move; n=n>>1; move-=1; } return ret;}原创 2020-08-12 09:50:34 · 55 阅读 · 0 评论 -
二叉树:二叉搜索树找第K大
/** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */int GLOBAL_K,RES;void dfs(struct TreeNode* root){ if(root==NULL) return; dfs(root->right).原创 2020-08-08 09:40:01 · 435 阅读 · 0 评论 -
面试题 04.02. 最小高度树
/** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */struct TreeNode* buildTree(int* nums, int l, int r){ if(l>r) return NULL; struct...原创 2020-08-06 14:46:33 · 97 阅读 · 0 评论 -
刷题常用 sort lambda
1、int compare (const void * a, const void * b){ return ( *(int*)a - *(int*)b );} qsort (values, 6, sizeof(int), compare);原创 2020-07-30 09:10:13 · 225 阅读 · 0 评论 -
算法总结.....
1、使用计数数组时,一定注意被计数的数字不能时负数,而很多用例中会有负数。原创 2020-07-25 17:08:38 · 71 阅读 · 0 评论 -
231. 2的幂
231. 2的幂给定一个整数,编写一个函数来判断它是否是 2 的幂次方。若为2的n次幂,n-1后,所有位都会取反。因此n & (n - 1)) == 0bool isPowerOfTwo(int n){ return (n>0)&&((n&(n-1))==0);}...转载 2020-07-22 11:18:28 · 65 阅读 · 0 评论 -
141. 环形链表
141. 环形链表bool hasCycle(struct ListNode *head) { struct ListNode *fast=head, *slow=head; while(fast&&fast->next) { slow=slow->next; fast=fast->next->next; if(fast==slow) return true;转载 2020-07-21 09:24:23 · 78 阅读 · 0 评论 -
DP:面试题 17.16. 按摩师
面试题 17.16. 按摩师int massage(int* nums, int numsSize){ if(numsSize==0) return 0; int dp0=0,dp1=nums[0]; for(int i=1;i<numsSize;i++) { int tdp0=fmax(dp0, dp1); int tdp1=dp0+nums[i]; dp0=tdp0;转载 2020-07-16 09:53:07 · 262 阅读 · 0 评论 -
DP:96. 不同的二叉搜索树
96. 不同的二叉搜索树int numTrees(int n){ int *dp=(int *)calloc(n+1, sizeof(int)); dp[0]=1; dp[1]=1; for(int i=2;i<n+1;i++) for(int j=1;j<i+1;j++) dp[i]+=dp[j-1]*dp[i-j]; return dp[n];}...转载 2020-07-15 22:12:02 · 80 阅读 · 0 评论 -
投票算法->用于找出出现次数最多的元素
// 投票算法 int temp = nums[0]; int count = 1; for (int i = 1; i < nums.length; i++) { if (nums[i] == temp) { count++; } else { count--; } if (count == .原创 2020-07-14 22:20:00 · 295 阅读 · 0 评论 -
不用加号的加法
67. 二进制求和设计一个函数把两个数字相加。不得使用 + 或者其他算术运算符。示例:输入: a = 1, b = 1输出: 2提示:a,b均可能是负数或 0结果不会溢出 32 位整数解题思路其实就是用位运算实现加法:13 => 11018 => 1000首先我们不考虑进位将两个二进制相加 1101 + 1000 = 0101 这个操作与(1101 异或 1000)的出来的值相同从上一步中我们可以得出,进位为1,且在第3位(从右往...转载 2020-07-12 22:08:35 · 404 阅读 · 1 评论 -
169. 多数元素
给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于⌊ n/2 ⌋的元素。169. 多数元素示例1:输入: [3,2,3]输出: 3示例2:输入: [2,2,1,1,1,2,2]输出: 2你可以假设数组是非空的,并且给定的数组总是存在多数元素。可以看做好几个不同军队抢夺一个高地,他们一对一消耗因为有个军队超过了n/2,经过消耗后,他还有人活着。int majorityElement(int* nums, int numsSize)...原创 2020-07-03 11:27:23 · 103 阅读 · 0 评论 -
如何给二维数组分配和释放空间(C语言)
char **a = (char **)calloc(wordsSize,sizeof(char*));原创 2020-07-03 10:47:48 · 1611 阅读 · 0 评论 -
剑指offer#3
剑指offer#3数组中重复出现的数字找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例 1:输入:[2, 3, 1, 0, 2, 5, 3]输出:2 或 3int findRepeatNumber(int* nums, int numsSize){ // 1、找出数组中最大的一个元素 int max = nums原创 2020-06-08 08:58:24 · 192 阅读 · 0 评论 -
剑指 Offer 15. 二进制中1的个数
请实现一个函数,输入一个整数,输出该数二进制表示中 1 的个数。例如,把 9表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2。示例 1:输入:00000000000000000000000000001011输出:3解释:输入的二进制串 00000000000000000000000000001011中,共有三位为 '1'。示例 2:输入:00000000000000000000000010000000输出:1解释:输入的二进制串 000000000..原创 2020-07-03 07:57:47 · 66 阅读 · 0 评论 -
258. 各位相加,不使用循环或者递归,且在 O(1) 时间复杂度内解决这个问题
给定一个非负整数 num,反复将各个位上的数字相加,直到结果为一位数。示例:输入: 38输出: 2解释: 各位相加的过程为:3 + 8 = 11, 1 + 1 = 2。 由于2 是一位数,所以返回 2。进阶:你可以不使用循环或者递归,且在 O(1) 时间复杂度内解决这个问题吗?思路时间复杂度为O(1)的解法:除个位外,每一位上的值都是通过(9+1)进位的过程得到的,想一下拨算盘进位把整数n看成n样物品,原本是以10个1份打包的,现在从这些10个1份打包好的里面,拿出1..转载 2020-07-03 07:49:29 · 270 阅读 · 0 评论 -
只出现一次的数字
只出现一次的数字给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1示例 2:输入: [4,1,2,1,2]输出: 4int singleNumber(int* nums, int numsSize){ int retval=0; for(int i=0;i<numsSize;i++) {.转载 2020-07-02 13:19:34 · 113 阅读 · 1 评论 -
不得使用if-else或其他比较运算符 找出a、b中较大的数字
面试题 16.07. 最大数值#include<math.h>int maximum(int a, int b){// double c = a; // double d = b; // int res = (int) ((Math.abs(c-d) + c + d)/2); // return res; long c = a; long d = b; int res = (int)转载 2020-07-01 21:44:39 · 441 阅读 · 0 评论 -
动态规划
动态规划example1 Fibonacci1 2 3 4 5 6 7 8 1 1 2 3 5 8 13 21 … 1 n=1,2fib(n)fib(n) = fib(n-1) + fib(n-2) other // overlap sub-problemfibonacci问题的备忘录模式:保存已经计算出来的答案,无需再重新计算example2有八个任务,每个任务只能在指定的时间段做,红色数字代表任务的价值,要求所选的任务时间上不能重叠,求所有任务组合中价值最大的组合原创 2020-06-25 17:32:36 · 196 阅读 · 0 评论