LintCode-数组划分

题目描述:

  给出一个整数数组nums和一个整数k。划分数组(即移动数组nums中的元素),使得:

    • 所有小于k的元素移到左边
    • 所有大于等于k的元素移到右边

  返回数组划分的位置,即数组中第一个位置i,满足nums[i]大于等于k。

注意事项

  你应该真正的划分数组nums,而不仅仅只是计算比k小的整数数,如果数组nums中的所有元素都比k小,则返回nums.length。

样例

  给出数组nums=[3,2,2,1]和 k=2,返回 1

 1 public class Solution {
 2     /**
 3      *@param nums: The integer array you should partition
 4      *@param k: As description
 5      *return: The index after partition
 6      */
 7     public int partitionArray(int[] nums, int k) {
 8        int length = nums.length;
 9          for(int i=0;i<length;i++){
10              if(nums[i]>=k){
11                  for(int j=length-1;j>=i;j--){
12                      if(nums[j]<k){
13                          int temp;
14                          temp = nums[i];
15                          nums[i] = nums[j];
16                          nums[j] = temp;
17                          length = j+1;
18                          break;
19                      }
20                      if(j==i){
21                          return j;
22                      }
23                  }
24              }
25          }
26          return nums.length;
27     }
28 }
时间: 2024-10-27 14:04:09

LintCode-数组划分的相关文章

数组划分

题目描述:给出一个整数数组nums和一个整数k.划分数组(即移动数组nums中的元素),使得: 1. 所有小于k的元素移到左边 2. 所有大于等于k的元素移到右边 返回数组划分的位置,即数组中第一个位置i,满足nums[i]大于等于k. 样例:给出数组nums=[3,2,2,1]和 k=2,返回 1 很简单的快排分割的应用.我们的思路跟前面讲过的"颜色分类"(详见:点击打开链接)是一样的,这道题比颜色分类甚至还要简单,因为它所有的元素只有两种情况: 1. 小于k的,靠拢在数组左边即可

31. 数组划分

给出一个整数数组 nums 和一个整数 k.划分数组(即移动数组 nums 中的元素),使得: 所有小于k的元素移到左边 所有大于等于k的元素移到右边 返回数组划分的位置,即数组中第一个位置 i,满足 nums[i] 大于等于 k. 注意事项 你应该真正的划分数组 nums,而不仅仅只是计算比 k 小的整数数,如果数组 nums 中的所有元素都比 k 小,则返回 nums.length. 样例 给出数组 nums = [3,2,2,1] 和 k = 2,返回 1. 挑战 使用 O(n) 的时间复

hdu-4417 Super Mario(树状数组 + 划分树)

题目链接: Super Mario Time Limit: 2000/1000 MS (Java/Others)     Memory Limit: 32768/32768 K (Java/Others) Problem Description Mario is world-famous plumber. His “burly” figure and amazing jumping ability reminded in our memory. Now the poor princess is

hdu 4417 Super Mario(离线树状数组|划分树)

Super Mario Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2584    Accepted Submission(s): 1252 Problem Description Mario is world-famous plumber. His "burly" figure and amazing jumping a

LintCode数组题总结

做算法题的时候,几乎不可避免要跟数组打交道.在LintCode上数组那一章有这么一些题目: 1)547. Intersection of Two Arrays 比较简单.要求找到2个数组的交集,简单点的方法就是用2个hashSet,第一个HashSet存第一个数组的元素.然后扫描第二个数组,如果第二个数组中的元素在第一个HashSet中出现了,那么就把它加到第二个HashSet中.最后第二个HashSet就是两个数组的交集了. 2)138. Subarray Sum 要求在一个数组中找到一个子数

2019 CCPC 网络赛第三题 K-th occurrence 后缀数组+划分树+ST表+二分

题意:给你一个长度为n的字符串,每次询问给出三个数:L , R , K,表示原串 L 到 R 的子串在原串第K次出现的首字母的位置 解题思路:对子串的大量操作,不难想到后缀数组(后缀树/后缀自动机不会,所以没想到),注意到子串s[L.....R]必然是某一个后缀的前缀,所以所有前缀是该子串的后缀的排名(即rank数组的值)必定连续,也就是说在后缀数组(sa数组)中,下标是连续的,那么就是求区间第K大了(因为sa数组的值代表的是在字符串中的位置)(这里区间第K大我用划分树求),至于这一段区间的起点

LintCode 数组(一)

加一 删除元素  买卖股票的最佳时机 加一 给定一个非负数,表示一个数字数组,在该数的基础上+1,返回一个新的数组. 样例:给定 [1,2,3] 表示 123, 返回 [1,2,4]. 给定 [9,9,9] 表示 999, 返回 [1,0,0,0]. public int[] plusOne(int[] digits) { int carries = 1; for(int i=digits.length-1; i>=0 && carries>0; i--){ int sum =

LintCode 数组(二)

两数组的交 两数组的交 样例:nums1 = [1, 2, 2, 1], nums2 = [2, 2], 返回 [2]. 解答一:用两个HashSet public int[] intersection(int[] nums1, int[] nums2) { Set<Integer> set = new HashSet<Integer>(); Set<Integer> inter = new HashSet<>(); for(int i=0; i<nu

SCUT - 299 - Kaildls的数组划分 - dp - 高精

https://scut.online/p/299 \(dp[i][k]\) 为前 \(i\) 个数分 \(k\) 组的最大值,那么 $dp[i][k]=max_{p=1}^{i-1}{dp[p][k-1]*sum(p+1,i)} $ #include<bits/stdc++.h> using namespace std; typedef long long ll; struct BigInt { const static int mod = 10000; const static int D

JAVA总裁--Java数组基础知识

1.数组的定义: 数组是由一组类型相同的数据元素构成的有序集合,每个数据元素称为一个数组元素(简称为元素),每个元素受n(n≥1)个线性关系的约束,每个元素在n个线性关系中的序号i1.i2.-.in称为该元素的下标,并称该数组为 n 维数组. 2.数组的特点: 元素本身可以具有某种结构,属于同一数据类型: 数组是一个具有固定格式和数量的数据集合. 3.数组的语法: package com.eduask.test; import java.util.Scanner; public class Ar