A resource allocation method, comprising: receiving, by a terminal device (400, 500), resource allocation information from a network device (600, 700), wherein the resource allocation information relates to an allocation of resources in an uplink transmission and is used to indicate a first resource; determining, by the terminal device (400, 500), a second resource based on the resource allocation information and an offset value, wherein the offset value indicates a quantity M of resource units that offset from a start location of the first resource relative to a start location of the second resource, and the offset value is predefined or configured by using higher layer signaling, wherein M ≥1; and sending, by the terminal device (400, 500), uplink data to the network device (600, 700) on the second resource, wherein a resource indicator value RIV, the start location RB START of the second resource, a quantity P of resource unit groups, and the offset value M meet the following relationship: when P − 1 ≤ ⌊ N / 2 ⌋, RIV = N P − 1 + RB START − M / X; or when P − 1 > ⌊ N / 2 ⌋, RIV = N N − P + 1 + N − 1 − RB START − M / X, wherein RIV indicates the resource indicator value that is comprised in the resource allocation information and that is used to indicate the first resource; N = └ QlX ┘, Q is a quantity of resource units that corresponds to the system bandwidth, Q is an integer greater than 1, and X is an integer greater than 2; and P indicates the quantity of resource unit groups comprised in the second resource, and each of the P resource unit groups comprises X resource units, wherein 1≤ P ≤[ N -( RB START -M) X]. receiving, by a terminal device (400, 500), resource allocation information from a network device (600, 700), wherein the resource allocation information relates to an allocation of resources in an uplink transmission and is used to indicate a first resource; determining, by the terminal device (400, 500), a second resource based on the resource allocation information and an offset value, wherein the offset value indicates a quantity M of resource units that offset from a start location of the first resource relative to a start location of the second resource, and the offset value is predefined or configured by using higher layer signaling, wherein M ≥1; and sending, by the terminal device (400, 500), uplink data to the network device (600, 700) on the second resource, wherein a resource indicator value RIV, the start location RB START of the second resource, a quantity P of resource unit groups, and the offset value M meet the following relationship: when P − 1 ≤ ⌊ N / 2 ⌋, RIV = N P − 1 + RB START − M / X; or when P − 1 > ⌊ N / 2 ⌋, RIV = N N − P + 1 + N − 1 − RB START − M / X, wherein RIV indicates the resource indicator value that is comprised in the resource allocation information and that is used to indicate the first resource; N = └ QlX ┘, Q is a quantity of resource units that corresponds to the system bandwidth, Q is an integer greater than 1, and X is an integer greater than 2; and P indicates the quantity of resource unit groups comprised in the second resource, and each of the P resource unit groups comprises X resource units, wherein 1≤ P ≤[ N -( RB START -M) X].