1 solutions
-
0
题解:双指针
无论本题是以核心代码模式(大家平时做的LeetCode就是核心代码模式)考察还是ACM模式(需要自己写输入输出)考察,都不需要在链表里面进行操作,可以借助数组来进行操作。
这样会很大程度地简化代码逻辑。
我们可以使用双指针来处理这道题,利用双指针来读取一段连续的相同元素的子数组。具体可以参考下面代码。
C++
#include<bits/stdc++.h> using namespace std; const int N=1010; int n,w[N]; int main(){ cin>>n; for(int i=1;i<=n;i++)cin>>w[i]; vector<int>res; //用来存储合并后的链表的元素 for(int l=1;l<=n;l++){ int r=l,num=w[r]; while(r+1<=n&&w[r+1]==w[r]){ num+=w[r]; r++; } res.push_back(num); l=r; } for(int &x:res){ cout<<x<<" "; } return 0; }
Java
import java.util.*; public class Main { static final int N = 1010; static int n; static int[] w = new int[N]; public static void main(String[] args) { Scanner scanner = new Scanner(System.in); n = scanner.nextInt(); for (int i = 1; i <= n; i++) { w[i] = scanner.nextInt(); } List<Integer> res = new ArrayList<>(); //用来存储合并后的链表的元素 for (int l = 1; l <= n; l++) { int r = l, num = w[r]; while (r + 1 <= n && w[r + 1] == w[r]) { num += w[r]; r++; } res.add(num); l = r; } for (int x : res) { System.out.print(x + " "); } } }
Python
n=int(input()) w=list(map(int,input().split())) l,r=0,0 res=[] while l<n: r=l num=w[r] #这一轮存入链表中的数字 while r+1<n and w[r+1]==w[r]: num+=w[r] r+=1 res.append(num) l=r+1 for x in res: print(x,end=' ')
- 1
Information
- ID
- 184
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 3
- Tags
- # Submissions
- 148
- Accepted
- 4
- Uploaded By