update list
This commit is contained in:
@@ -95,10 +95,9 @@ p->next=NULL。此时,原单链表可以看作两条单链表,一条从head
|
|||||||
|
|
||||||
## 复杂链表的复制
|
## 复杂链表的复制
|
||||||
|
|
||||||
题目:有一个复杂链表,其结点除了有一个m_pNext指针指向下一个结点外,
|
题目:有一个复杂链表,其结点除了有一个m_pNext指针指向下一个结点外,还有一个m_pSibling指向链表中的任一结点或者NULL。其结点的C++定义如下:
|
||||||
还有一个m_pSibling指向链表中的任一结点或者NULL。其结点的C++定义如下:
|
|
||||||
```
|
```
|
||||||
struct ComplexNode
|
struct ComplexNode
|
||||||
{
|
{
|
||||||
int m_nValue;
|
int m_nValue;
|
||||||
ComplexNode* m_pNext;
|
ComplexNode* m_pNext;
|
||||||
@@ -122,8 +121,7 @@ struct ListNode
|
|||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
分析:
|
分析:第一个公共节点,也就是2个链表中的节点的m_pNext 指向的同一个节点。
|
||||||
第一个公共节点,也就是2个链表中的节点的m_pNext 指向的同一个节点。
|
|
||||||
|
|
||||||
1. 先遍历2个链表,得到各自的长度,和差sub
|
1. 先遍历2个链表,得到各自的长度,和差sub
|
||||||
2. 长链表先遍历sub个节点,然后2个节点一起遍历
|
2. 长链表先遍历sub个节点,然后2个节点一起遍历
|
||||||
@@ -149,6 +147,7 @@ struct ListNode{
|
|||||||
|
|
||||||
|
|
||||||
## 在O(1)时间内删除链表结点
|
## 在O(1)时间内删除链表结点
|
||||||
|
|
||||||
题目:给定链表的头指针和一个结点指针,在O(1)时间删除该结点。链表结点的定义如下:
|
题目:给定链表的头指针和一个结点指针,在O(1)时间删除该结点。链表结点的定义如下:
|
||||||
|
|
||||||
```
|
```
|
||||||
@@ -185,15 +184,6 @@ struct node{
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
## 链表和数组的区别在哪里?
|
|
||||||
|
|
||||||
分析:主要在基本概念上的理解。
|
|
||||||
但是最好能考虑的全面一点,现在公司招人的竞争可能就在细节上产生,
|
|
||||||
谁比较仔细,谁获胜的机会就大。
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -77,6 +77,20 @@ tmp[i] = tmp[i]>=0 ? tmp[i] : tmp[i]+16;
|
|||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## ipv4 转 int
|
||||||
|
|
||||||
|
比如: 10.67.81.35 , 转为int 为
|
||||||
|
|
||||||
|
思路:
|
||||||
|
|
||||||
|
|
||||||
|
```
|
||||||
|
代码
|
||||||
|
```
|
||||||
|
|
||||||
|
那么,int 转 ipv4 如何解呢?
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## 判断一个自然数是否是某个数的平方
|
## 判断一个自然数是否是某个数的平方
|
||||||
|
|
||||||
|
|||||||
@@ -109,6 +109,23 @@ int findaddends(int *data,int length,int sum,int *a,int *b);
|
|||||||
巧妙解法:数组2端向中间扫描,复杂度O(N)
|
巧妙解法:数组2端向中间扫描,复杂度O(N)
|
||||||
|
|
||||||
|
|
||||||
|
## 求连续子数组和为m的组合
|
||||||
|
|
||||||
|
数组 [2,3,1,2,4,3]求连续子数组sum=7, 结果[1,2,4] [3,4]
|
||||||
|
|
||||||
|
* 暴力遍历
|
||||||
|
* 滑动窗口, 左指针,右指针
|
||||||
|
|
||||||
|
```
|
||||||
|
if sum<k && r<len{
|
||||||
|
sum+=arr[r]
|
||||||
|
r++
|
||||||
|
}else{
|
||||||
|
sum -= arr[l]
|
||||||
|
l++
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
## 和为m的组合
|
## 和为m的组合
|
||||||
|
|
||||||
@@ -127,6 +144,11 @@ print_sum_detials(int n , int sum)
|
|||||||
4. 规划方程
|
4. 规划方程
|
||||||
|
|
||||||
|
|
||||||
|
## 钞票面值100,50,20,10,5,2,1 元,求支付628元最少需要几张钞票
|
||||||
|
|
||||||
|
思路: 贪心算法
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## 若干个数的和与M最为接近
|
## 若干个数的和与M最为接近
|
||||||
|
|
||||||
@@ -205,6 +227,14 @@ print_sum_detials(int n , int sum)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## 数组分隔成和相等的2个子集
|
||||||
|
|
||||||
|
给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等 (eetcode 416, 难度中等)
|
||||||
|
|
||||||
|
思路: 动态规划
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## 奇偶分离
|
## 奇偶分离
|
||||||
|
|
||||||
给定一个存放整数的数组,重新排列数组使得数组左边为奇数,右边为偶数。
|
给定一个存放整数的数组,重新排列数组使得数组左边为奇数,右边为偶数。
|
||||||
|
|||||||
Reference in New Issue
Block a user